json输入:
[
{
"name": "cust1",
"grp": [
{
"id": "46",
"name": "BA2"
},
{
"id": "36",
"name": "GA1"
},
{
"id": "47",
"name": "NA1"
},
{
"id": "37",
"name": "TR3"
},
{
"id": "38",
"name": "TS1"
}
]
}
]
预期,输出是两行:
name: cust1
groups: BA2 GA1 NA1 TR3 TS1
我试图构建过滤器但没有成功..
$ jq -r '.[]|"name:", .name, "groups:", (.grp[]|[.name]|@tsv)' test_json
name:
cust1
groups:
BA2
GA1
NA1
TR3
TS1
更新:下面提供的解决方案工作正常,但我没有预测不存在组的情况:
[
{
"name": "cust1",
"grp": null
}
]
在这种情况下,提供的解决方案会返回错误:
$ jq -jr '.[]|"name:", " ",.name, "\n","groups:", (.grp[]|" ",.name),"\n"' test_json2
name: cust1
jq: error (at test_json2:6): Cannot iterate over null (null)
任何解决方法表示赞赏。
使用“加入”,
-j
并带有一个占位符
也就是说,给出
@tsv
两个数组,一个带有名称,一个带有组。每个数组将成为自己的行。如果
grp
数组可能为空,而您想插入 a-
代替:操作
x // y
返回x
,除非x
计算结果为null
或false
在这种情况下返回y
。这也将处理
grp
完全丢失的情况(不仅仅是一个空数组)。