jq:如何选择具有不同结构的元素

时间:2017-11-17 11:54:55

标签: json select jq

我确信这很简单,但我不知道怎么用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;

交互式示例 https://jqplay.org/s/fOBuwdj6WS

&#XA;

1 个答案:

答案 0 :(得分:2)

name是数组的情况下,提取所有name,但仅提取名字

jq '.[].name | if type=="array" then first else . end' <file

对于您的样本输入,output是:

"aaa"
"bbb"
"fff"