Json jq:使用正则表达式选择属性值

Json jq:使用正则表达式选择属性值,json,regex,jq,Json,Regex,Jq,我有以下json对象: { "foo": { "name": "Name 1", "color": "green", "something_else": { "name" : "Name 2" } }, "bar": { "name": "Something else", "color": "red" } } 要使用jq获取名为“name”的

我有以下json对象:

{
    "foo": {
        "name": "Name 1",
        "color": "green",
        "something_else": {
            "name" : "Name 2"
        }

    },
    "bar": {
        "name": "Something else",
        "color": "red"
    }
}
要使用jq获取名为“name”的属性的所有可能的父属性,我尝试了:

path(recurse|select(.name? !=""))[0] 
它能起作用,并能回馈:

"foo"
"foo"
"bar"

现在我想应用ReGEX过滤属性值,比如我想只考虑所有的属性,称为“代码>名称<代码>,它的值从“名称”开始,后面跟着一个数字,如<代码>“名称2”<代码>,得到:

"foo"
"foo"
我试过这个:

path(recurse|select(.name? =~ match(/Name */)))[0] 

如何使用匹配以及如何将其正确放置在查询中?

您可以使用
路径/1
而不是
路径
,因为前者忽略空路径。同样,对于
path
,您需要添加一个过滤器逻辑来忽略与任何正则表达式条件都不匹配的
null

paths(select(.name? | match("Name [0-9]")))[0]