我确信这很简单,但我不知道怎么用jq。


我有一个类似这一个


 [
 {
 “id”:“109”,
 “名字”:“aaa”
 },
 {
 “id”:“1098”,
 “名字”:[
 “BBB”,
 “CCC” 
 ]
 },
 {
 “id”:“2000”,
 “名字”:[
 “FFF”,
 “DDD” 
 ]
 }
]



 我想提取 .name
。当 name
是一个数组时,我想总是把第一个元素。
我必须创建一个 if
子句,还是有更直接的模式?
作为输出我希望“aaa”“bbb”“fff”
,但我有“aaa”“bbb”“fff”“bbb”“fff”
。
这是我到目前为止所拥有的:< / p>&#xA;&#xA;
if。[]。name | type ==“array”then。[]。name [0]? else first(。[]。name)end&#xA;
&#xA;&#xA; 输出:
&#xA;&#xA;<代码> “AAA” &#XA; “BBB” &#XA; “FFF” &#XA; “BBB” &#XA; “FFF” &#XA; 代码>&#XA;& #xA; &#XA;
答案 0 :(得分:2)
在name
是数组的情况下,提取所有name
,但仅提取名字:
jq '.[].name | if type=="array" then first else . end' <file
对于您的样本输入,output是:
"aaa"
"bbb"
"fff"