JQ - 递归 JSON return parent
JQ - Recursive JSON return parent
我正在尝试使用 JQ return parent json:
{
"all" : {
"text": "a",
"children": [
{
"text": "aa",
"children": []
},
{
"text": "ab",
"children": []
},
{
"text": "ac",
"children": [
{
"text": "aca",
"children": []
},
{
"text": "acb",
"children": []
},
{
"text": "acc",
"children": [
{
"text": "acca",
"children": []
}
]
}
]
}
]
}
}
目标是检索元素的 parent 文本。
例如:
- 正在搜索 acca --> acc
- 正在搜索 acc --> ac
此代码无效:
.all | .children[] as $parent | select(.children[].text == "acca" ) | $parent.text
有人可以帮助我吗?
谢谢! :)
这很简单。获取您要查找的字符串的路径,从中检索到其祖父母的路径,然后从那里提取 text
。
getpath(
paths(strings
| select(. == "acca")
)[:-3]
) .text
这是一个简洁的参数化解决方案,不需要显式使用 recurse
:
paths(objects | select(.text == $needle)) as $p
| getpath($p[:-2]).text
用法示例:
jq --arg needle acca -f program.jq input.json
(请注意,可能不需要引用“针”。)
我正在尝试使用 JQ return parent json:
{
"all" : {
"text": "a",
"children": [
{
"text": "aa",
"children": []
},
{
"text": "ab",
"children": []
},
{
"text": "ac",
"children": [
{
"text": "aca",
"children": []
},
{
"text": "acb",
"children": []
},
{
"text": "acc",
"children": [
{
"text": "acca",
"children": []
}
]
}
]
}
]
}
}
目标是检索元素的 parent 文本。 例如:
- 正在搜索 acca --> acc
- 正在搜索 acc --> ac
此代码无效:
.all | .children[] as $parent | select(.children[].text == "acca" ) | $parent.text
有人可以帮助我吗? 谢谢! :)
这很简单。获取您要查找的字符串的路径,从中检索到其祖父母的路径,然后从那里提取 text
。
getpath(
paths(strings
| select(. == "acca")
)[:-3]
) .text
这是一个简洁的参数化解决方案,不需要显式使用 recurse
:
paths(objects | select(.text == $needle)) as $p
| getpath($p[:-2]).text
用法示例:
jq --arg needle acca -f program.jq input.json
(请注意,可能不需要引用“针”。)