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

时间:2018-07-02 08:52:38

标签: json regex jq

我有以下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"

现在,我想应用正则表达式来过滤属性值,例如,我只想考虑所有名为name的属性,这些属性的值均以“名称”开头,后跟数字,例如"Name 2",得到:

"foo"
"foo"

我尝试过:

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

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

1 个答案:

答案 0 :(得分:1)

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

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

请参见jq - documetation - paths/1