我有以下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完成吗?
答案 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还有很多选择。