【问题标题】:jq: Select property value using regexjq:使用正则表达式选择属性值
【发布时间】:2018-07-02 08:52:38
【问题描述】:

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

如何使用 match 以及如何在查询中正确放置它?

【问题讨论】:

    标签: json regex jq


    【解决方案1】:

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

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

    jq - documetation - paths/1

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多