json - 使用 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
然后sed
或cut
,但我认为有更好的方法来做到这一点。如果你能指出我正确的方向,那就太好了!谢谢!
解决方案
一种选择可能是使用pup,至少用于解析 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。
推荐阅读
- java - Quartz 作业注解@DisallowConcurrentExecution 实现
- build - 在跨平台环境中管理 conda env
- php - php.ini 已修改,但无法上传文件
- docker - Magento 2中的Scandipwa-base_ssl-term错误
- python - 位置论据据说是缺失的,但给出了,有什么问题?
- laravel - 表单关闭时自动打印
- linux - 如何将静态网站副本的 URL 缩短为少于 256 个字符?(使用 wget 创建)
- node.js - 摩卡前功能无法正常工作
- rabbitmq - 对 RabbitMQ 服务器上的所有交换进行窃听
- node.js - Firebase Cloud 函数返回 2 个集合的数据