jqを使用してJsonテーブル配列をオブジェクトに変換する

jqを使用してJsonテーブル配列をオブジェクトに変換する

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番目ではなくキーと値のみです)。

おすすめ記事