2016-06-28 5 views
1

の一意の値がここ+親値を抽出するJSONの例である:JQフィルタ:配列

[ 
    { 
    "AAA": "111", 
    "images": [ 
     { 
     "BBB": "some_value1" 
     }, 
     { 
     "BBB": "some_value2" 
     }, 
     { 
     "BBB": "some_value3" 
     } 
    ] 
    }, 
    { 
    "AAA": "222", 
    "images": [ 
     { 
     "BBB": "some_value4" 
     }, 
     { 
     "BBB": "some_value5" 
     }, 
     { 
     "BBB": "some_value6" 
     } 
    ] 
    } 
] 

次のフィルタは、ほぼ必須タスク解決:

cat EXAMPLE.json | jq -r ".[] | [.AAA, .images[].BBB] | @csv" 

はさらに、それが唯一の結果を与えますこのように:

"111","some_value1","some_value2","some_value3" 
"222","some_value4","some_value5","some_value6" 

質問です:私JQのFILTを変更する方法次の結果を受け取る:

"111","some_value1" 
"111","some_value2" 
"111","some_value3" 
"222","some_value4" 
"222","some_value5" 
"222","some_value6" 

助けをお待ちしています。

答えて

1

あなたがこれを行うことができます:

$ jq -r '.[] | [.AAA] + (.images[] | [.BBB]) | @csv' EXAMPLE.json 
+0

それは働いていたが、そんなにありがとう。 – fkrents

+1

Jeffさんの答えはまったく正しいですが、OPの "最善の試み"から最終的な解決策まで、より自然な進行に従うことがわかります: 'jq -r '[] | .images []として$ image | [.AAA、$ image.BBB] | @ csv'' –

0

fkrents最初の試みの若干の変更:

.[] | [.AAA, .images[].BBB] | @csv 

は、このソリューションにつながる:

.[] | .AAA as $a | .images[].BBB | [$a, .] | @csv 
関連する問題