使用jq解析JSON字段并为每个子节点重复输出

时间:2018-01-21 07:29:37

标签: json jq

我有以下JSON:

    {
        "field1":"foo",
        "array":[
            {
                child_field1:"c1_1",
                child_field2:"c1_2"
            },
            {
                child_field1:"c2_1",
                child_field2:"c2_2"
            }
         ]...
    }

并使用jq,我想返回以下输出,其中为每个子元素重复field1的值。:

    foo,c1_1,c1_2
    foo,c2_1,c2_2
    ...

我可以单独访问每个字段,但无法返回上面所需的结果。

这可以用jq完成吗?

3 个答案:

答案 0 :(得分:2)

jq -r '.array[] as $a | [.field1, $a.child_field1, $a.child_field2] | @csv'

您提供的样本数据是否正确,但我承认有很多方法可以在jq中执行此类操作,而这只是第一个出现在脑海中的方法。

我通过@csv喂它,因为看起来这就是你想要的,但如果你更喜欢实际的输出,就像你写的一样,那么:

jq -r '.array[] as $a | "\(.field1),\($a.child_field1),\($a.child_field2)"'

会产生它

答案 1 :(得分:0)

jq 解决方案:

jq -r '.field1 as $f1 | .array[] 
       | [$f1, .[]] 
       | join(",")' input.json

输出:

foo,c1_1,c1_2
foo,c2_1,c2_2

答案 2 :(得分:0)

在这种情况下,不需要reduce或`to_entries'或明确列出字段 - 可以简单地利用jq的回溯行为:

.field1 as $f
| .array[]
| [$f, .[]]
| @csv

正如@MatthewLDaniel指出的那样,在这里使用@csv还有很多选择。