Text-Processing
使用 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, .)'
最後一步是以某種方式將鍵索引到我仍然無法正確處理的值中。
回答我自己的問題:
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'
將兩者結合可以得到解決方案。這適用於任意數量的元素(0 和 1 只是鍵和值,而不是第一個和第二個)。