首页 > 解决方案 > 使用 shell 脚本从 html 页面上的 javascript 中获取 JSON 字符串

问题描述

我想用shell脚本解析的html页面上的javascript中有有效的json。首先,我想从 to 获取整个 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=...”的 ID。我一直在尝试使用grep foo.bar.Processor.message然后sedcut,但我认为有更好的方法来做到这一点。如果你能指出我正确的方向,那就太好了!谢谢!

标签: jsonregexshellsedjq

解决方案


一种选择可能是使用,至少用于解析 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(进行调整以确保 HTML 中的 JSON 有效),这会产生:

347EDAFA2B136D7825745B0A490DE32

当然有很多警告。YMMV。


推荐阅读