2017-11-17 13 views
2

これは非常に簡単だと確信していますが、jqを使ってどのように行うのか分かりません。jq:異なる構造の要素を選択する方法

私はthis one

[ 
    { 
    "id": "109", 
    "name": "aaa" 
    }, 
    { 
    "id": "1098", 
    "name": [ 
     "bbb", 
     "ccc" 
    ] 
    }, 
    { 
    "id": "2000", 
    "name": [ 
     "fff", 
     "ddd" 
    ] 
    } 
] 

のようなJSONを持っていると私は.nameを抽出したいと思います。 nameが配列の場合は、常に最初の要素を取りたいと思います。

if節を作成する必要がありますか、それとも直接モードがありますか?

出力として"aaa" "bbb" "fff"を持っていますが、私には"aaa" "bbb" "fff" "bbb" "fff"があります。ここで

は、私がこれまで持っているものです。

if .[].name|type == "array" then .[].name[0]? else first(.[].name) end 

出力:ケース内のすべてのname Sを抽出するために

"aaa" 
"bbb" 
"fff" 
"bbb" 
"fff" 

対話例https://jqplay.org/s/fOBuwdj6WS

答えて

2

が、唯一最初の名前nameは配列です:

あなたのサンプル入力のために3210
jq '.[].name | if type=="array" then first else . end' <file 

outputは次のとおりです。

"aaa" 
"bbb" 
"fff" 
+1

は素晴らしい、本当にありがとうございました – aborruso

関連する問題