使用 select 仅过滤部分输入

Filter only part of input using select

给出这样的输入:

{
  "type": "collection",
  "foo": "bar",
  "children": [
    {
      "properties": {
        "country": "GB"
      },
      "data": "..."
    },
    {
      "properties": {
        "country": "PL"
      },
      "data": "..."
    }
  ]
}

如何使用 jq 保留所有 JSON 结构,但使用 select() 过滤掉一些 children。例如,如果我只想 return 与国家 GB children,我希望得到以下输出:

{
  "type": "collection",
  "foo": "bar",
  "children": [
    {
      "properties": {
        "country": "GB"
      },
      "data": "..."
    }
  ]
}

如果我只想要 children,使用 .children[] | select(.properties.country == "GB") 很容易,但不会保留 JSON 的其余部分。

关键是要用|=。在本例中,您可以使用以下模式:

.children |= map(select(...))