Text-Processing

使用 jq 將 Json 表數組轉換為對象

  • May 26, 2020

我正在嘗試將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 只是鍵和值,而不是第一個和第二個)。

引用自:https://unix.stackexchange.com/questions/589099