首页 > 解决方案 > 使用 jq 从数组中提取所有字段

问题描述

我有一个名为的 json 文件collection.json,例如:

{
    "info" : {
        ...
    },
    "item" : [
        {...}, # A
        {...}, # B
        {...}  # C
    ]

}

我想要数组中的所有字段item,如下所示:

{...}, # A
{...}, # B
{...}  # C

我试过的:

jq -r '.item' 集合.json

有了这个,我仍然在开头和结尾加上方括号。

jq -r '.item[]' 集合.json

这样,字段之间的逗号就被删除了。

标签: arraysjsonjq

解决方案


由于您的预期输出既不是有效的 JSON(这将是您的第一个建议jq -r '.item' collection.json,包括逗号和数组括号)也不是元素的纯原始内容(这将是您jq -r '.item[]' collection.json删除所有周围 JSON 语法的第二个建议),您将拥有自己构建所需的语法,这可能取决于.item数组元素的实际含义。

例如,使用内置函数将它们转换为字符串并将它们tostring粘合在一起:join

jq -r '.item | map(tostring) | join(",\n")' collection.json

推荐阅读