[英]Flatten a hierarchical JSON array using JQ
誰能幫我獲得正確的 jq 命令來展平下面的示例? 我看過其他一些帖子,我正在破解它,但似乎無法得到它。 我將不勝感激任何幫助。
輸入:
[
{
"name": "level1",
"children": [
{
"name": "level2",
"children": [
{
"name": "level3-1",
"children": []
},
{
"name": "level3-2",
"children": []
}
]
}
]
}
]
Output:
[
{
"displayName": "level1",
"parent": ""
},
{
"displayName": "level2",
"parent": "level1"
},
{
"displayName": "level3-1",
"parent": "level2"
},
{
"displayName": "level3-2",
"parent": "level2"
}
]
使用簡單的遞歸 function:
def f: .name as $parent | .children[] | {$parent, displayName: .name}, f;
[ {name: "", children: .} | f ]
這是一個不涉及幫助程序 function 的簡單解決方案,實際上解決了一個更普遍的問題。 它基於首先為每個孩子添加一個“父”鍵,然后使用..
來收集所有名稱/父對的想法。
所以首先考慮:
[ walk(if type=="object" and has("children")
then .name as $n | .children |= map(.parent = $n)
else . end)
| ..
| select(type=="object" and has("name"))
| {displayName: .name, parent}
]
除了頂級(無父) object 之外,這符合要求,它產生的 a.parent 值為null
。 這通常比“”更具有 JSON 風格,但如果確實需要空字符串,則只需將上面的最后一行替換為:
| {displayName: .name, parent: (.parent // "")}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.