[英]How to extract JSON object from JSON array using JQ
我有这种 JSON:
"[{\"domain\": \"domain.com\", \"adminEmail\": \"test@example.com\", \"ipAddress\": \"1.1.1.1\", \"admin\": \"admin\", \"package\": \"Default\", \"state\": \"Active\"},{\"domain\": \"domain2.com\", \"adminEmail\": \"test@example.com\", \"ipAddress\": \"8.8.8.8\", \"admin\": \"admin2\", \"package\": \"Default\", \"state\": \"Active\"},{\"domain\": \"domain3.com\", \"adminEmail\": \"test@domain3.com\", \"ipAddress\": \"8.8.4.4\", \"admin\": \"admin3\", \"package\": \"Default\", \"state\": \"Active\"}]"
我想提取一个具有 state“活动”的域列表。
例子:
jq 'some command' my.json
将打印:
domain.com
domain2.com
domain3.com
我尝试的每个命令都会出现相同的错误:
jq: error (at test.json:1): Cannot iterate over string ("[{\"domain...)
JSON 似乎对我有效。 我观察到的一件事是 python3 json.tool 模块无法打印此 JSON 格式。 我不知道为什么。
我试图避免创建一个脚本来读取这个 JSON。我想要一些可以从命令行 pipe 读取并打印域的工具。
jq '.[] | select(.state=="Active") | .domain' my.json
output:
domain.com
domain2.com
domain3.com
正如@Inian 指出的那样,这里的关键是使用fromjson
。 把它们放在一起:
jq -r 'fromjson[] | select(.state=="Active") | .domain'
您的字符串是 JSON 编码的 object,但随后再次使用 JSON 对该字符串进行重新编码。
因此,您首先需要找到一种方法来解码 JSON,并将其结果 output 返回到一个新文件中。
要用 jq 做到这一点:
jq -r input1.json > input2.json
现在你的input2.json
是一个普通的 json 文件,你可以正常执行 jq 命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.