【问题标题】:How to extract JSON object from JSON array using JQ如何使用 JQ 从 JSON 数组中提取 JSON 对象
【发布时间】:2020-09-01 06:15:58
【问题描述】:

我有这种 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\"}]"

我想提取状态为“活动”的域列表。

例子:

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。我想要一些可以从命令行管道读取并打印域的工具。

【问题讨论】:

    标签: json jq


    【解决方案1】:

    正如@Inian 所指出的,这里的关键是使用fromjson。把它们放在一起:

    jq -r 'fromjson[] | select(.state=="Active") | .domain'
    

    【讨论】:

    • 从未使用过。优秀的!谢谢。
    【解决方案2】:
    jq '.[] | select(.state=="Active") | .domain' my.json
    

    输出:

    domain.com
    domain2.com
    domain3.com
    

    【讨论】:

    • 这是我试过的。有了@evert 的答案,它就被修复了。
    【解决方案3】:

    您的字符串是 JSON 编码的对象,但随后该字符串再次使用 JSON 重新编码。

    因此,您首先需要找到一种方法来解码 JSON,并将结果输出回一个新文件。

    用 jq 做到这一点:

    jq -r input1.json > input2.json
    

    现在你的input2.json 是一个常规的 json 文件,你可以正常执行 jq 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      相关资源
      最近更新 更多