[英]JQ with nested JSON
您好,我是JQ和命令行工具的新手,所以我真的迷失了。 我有以下形式的JSON文件:
{
"Z": {
"00": [{
"e": "A000"
}, {
"e": "A020"
}
],
"01": [{
"e": "A102"
}, {
"e": "C027"
}
]
},
"X": {
"00": [{
"e": "P002"
}, {
"e": "T027"
}
],
"01": [{
"e": "A003"
}, {
"e": "A020"
}
]
}
}
其中每個對象是一個七個字符的字母數字代碼。
我正在尋找的是一個命令,用於輸出用換行符分隔的每個代碼,如下所示:
Z00A000
Z00A020
Z01A102
Z01C027
X00P002
X00T027
X01A003
X01A020
盡管名稱“ Z”和“ X”以及子名稱“ 00”“ 01”等易於更改,所以JSON的格式始終相同,因此無法對其進行硬編碼。
如前所述,我對此並不陌生,而最近的是
jq '.[] | .[] | .[] | .e'
其中列出了代碼的最后四個字符。
老實說,我完全迷路了,因此不勝感激。 謝謝閱讀。
這是基於格式統一性的解決方案。
首先,讓我們定義一個輔助函數,該函數處理JSON對象,其值是{"e": _}
形式的對象數組:
def combine:
keys_unsorted[] as $k
| $k + (.[$k][]|.e) ;
現在,解決方案可以只用兩行編寫:
keys_unsorted[] as $k
| $k + (.[$k]|combine)
使用-r命令行選項將導致發出字符串而不會將引號引起來。
以下內容不僅更加籠統,而且還說明了可以進一步推廣和推廣各種不同的策略:
paths as $p
| getpath($p) as $v
| select($v | type == "string")
| $p
| map(select(type=="string"))
| map(select(. != "e"))
| . + [$v]
| join("")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.