繁体   English   中英

如何使用JQ从JSON数组中提取JSON object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM