key1:値配列、key2:値配列、....のjson構造体をオブジェクト配列に変換しようとしています。配列のサイズはすべて同じで、各オブジェクトは各配列のx位置にある項目の集合にすぎません。助けが必要な場合は、変換にjqの汎用コードを使用するのが最善です。
入力する
{
"IdentifierName": [
"A",
"B",
"C"
],
"Code": [
5,
8,
19
]
}
期待される出力
[
{
"IdentifierName": "A",
"Code": 5
},
{
"IdentifierName": "B",
"Code": 8
},
{
"IdentifierName": "C",
"Code": 19
}
]
編集:これまでの進捗状況:
jq 'to_entries|map(.key) as $keys| (map(.value)|transpose) as $values |$values|map($keys, .)'
最後のステップは、まだ正しく取得できない値でキーをインデックス化することです。
ベストアンサー1
私の質問に答えるには:
jq 'to_entries|map(.key) as $keys| (map(.value)|transpose) as $values |$values|map([$keys, .] | transpose| map( {(.[0]): .[1]} ) | add)'
説明: ["IdentifierName", "Code"] キーと値を [ [ "A", 5 ], [ "B", 8 ], [ "C", 19 ] ] で抽出し、キーから値として
インデックスを作成するします。 json-seqのキータプルと(それぞれ)値タプルを取得して転置し、ペアに圧縮します。
echo '[[
"IdentifierName",
"Code"
],
[
"C",
19
]
]'|jq '.|transpose| map( {(.[0]): .[1]} ) | add'
2つを組み合わせると、ソリューションが提供されます。これは要素数に関係なく機能します(0と1は最初と2番目ではなくキーと値のみです)。