Получить строку JSON из javascript на html-странице, используя скрипт оболочки - PullRequest
0 голосов
/ 27 декабря 2018

В javascript на html-странице есть допустимый json, который я хочу проанализировать с помощью сценария оболочки.Прежде всего я хотел бы получить всю строку json от { до }, а затем я могу проанализировать ее, например, с помощью jq.

Вот как в основном выглядит мой html:

<!DOCTYPE html>
<html>
  <head>
    <title>foobar</title>

  </head>

  <body>

  <script type="text/javascript" src="resources/script.js" charset="UTF-8"></script>
  <script type="text/javascript" src="resources/resources.js" charset="UTF-8"></script>

    <script type="text/javascript">
    if( foo.foobar.getInstance().isbar() ) 
    {
        foo.bar.Processor.message( {"head":{"url":"anotherfoo;barid=347EDAFA2B136D7825745B0A490DE32"},...});
    }
    else
    {....}
    </script>
  </body>
</html>

В конце я хочу получить идентификатор, который находится по адресу "barid = ...".Я пытался использовать grep foo.bar.Processor.message, а затем sed или cut, но я думаю, что есть лучшие способы сделать это.Если бы вы могли указать мне правильное направление, это было бы здорово!Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Одним из вариантов может быть использование , по крайней мере, для анализа HTML:

< input.html pup 'script:not(:empty) text{}' |
  grep foo.bar.Processor.message | grep -o '{.*}' |
  jq -r '.head.url
         | split(";")[]
         | select(test("barid="))
         | sub("barid=";"")'

С вашим HTML (настроенным для обеспечения корректности JSON в HTML), этопроизводит:

347EDAFA2B136D7825745B0A490DE32

Конечно, есть много предостережений.YMMV.

0 голосов
/ 27 декабря 2018

Обычно не рекомендуется использовать инструменты командной строки unix для анализа HTML.Но если вы знаете свою маркерную строку foo.bar.Processor.message, то вы можете использовать это решение sed + jq:

sed -n 's/foo\.bar\.Processor\.message(\([^)]*\).*/\1/p' file.html |
jq -r '.head.url | split(";")[1] | split("=")[1]'

347EDAFA2B136D7825745B0A490DE32

При отсутствии jq вы можете использоватьэто sed + gnu grep решение:

sed -n 's/foo\.bar\.Processor\.message(\([^)]*\).*/\1/p' file.html |
grep -oP ';barid=\K\w+'
...