【问题标题】:Extracting matched child json from a nested JSON object with jq使用 jq 从嵌套的 JSON 对象中提取匹配的子 json
【发布时间】:2015-04-23 20:52:48
【问题描述】:

因此给定一个 JSON 对象数组:

 {
  "header" : {
    "user" : "baskar"
  },
  "requests" : [ {
    "first_name" : "mike",
    "last_name" : "mat"
  }, {
    "first_name" : "mike1",
    "last_name" : "mat"
  } ],
  "check" : [ "Y" ]
}

我想根据条件从嵌套请求中提取键/值的子集,同时保持外部对象的其他属性不变,产生类似:当我搜索 first_name='mike'

{
  "header" : {
    "user" : "baskar"
  },
  "requests" : [ {
    "first_name" : "mike",
    "last_name" : "mat"
  } ],
  "check" : [ "Y" ]
}

我尝试了下面的事情,

[.requests[] | select(.first_name == "mike")]

但是,它给出了匹配请求的子集,但不返回标头和检查元素。

我确信一定有一种相当简单的方法可以用 jq 实现这一点。帮助表示赞赏。

【问题讨论】:

    标签: json jq


    【解决方案1】:

    您需要考虑通过过滤来更新请求数组。

    这应该可行:

    .requests |= map(select(.first_name == "mike"))
    

    【讨论】:

    • 太棒了,如果它被包裹在一个括号内。但我的实际要求没有括号。我已经编辑了我的请求。上述命令不适用于上述请求。
    • 知道了。非常感谢。 .requests |= map(select(.first_name == "mike"))。这在这种情况下有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多