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 文本。 例如:

此代码无效: .all | .children[] as $parent | select(.children[].text == "acca" ) | $parent.text

有人可以帮助我吗? 谢谢! :)

这很简单。获取您要查找的字符串的路径,从中检索到其祖父母的路径,然后从那里提取 text

getpath(
  paths(strings
    | select(. == "acca")
  )[:-3]
) .text

Online demo

这是一个简洁的参数化解决方案,不需要显式使用 recurse:

paths(objects | select(.text == $needle)) as $p
| getpath($p[:-2]).text

用法示例:

jq --arg needle acca -f program.jq input.json

(请注意,可能不需要引用“针”。)