首页 > 解决方案 > 如何使用jq在json文件中过滤子对象中的某些数组

问题描述

我需要使用嵌套结构过滤 JSON,如下所示。应过滤掉数组 b 中属性 x 在 x 的值中包含“z”的所有对象。其余的应保留在文件中。

{
    "a": {
        "b": [
            {
                "c": "1",
                "x": "aaa",
            },
            {
                "c": "2",
                "x": "aza",
            },
            {
                "c": "7",
                "x": "azb",
            }
        ]
    },
    "d": {
        "e": [
            "1"
        ],
        "f": [
            "2"
        ]
    }
}

预期输出:

{
  "a": {
    "b": [
      {
        "c": "1",
        "x": "aaa"
      }
    ]
  },
  "d": {
    "e": [
      "1"
    ],
    "f": [
      "2"
    ]
  }
}

标签: jsonjq

解决方案


使用:select_contains

jq '.a.b|=[.[]|select(.x|contains("z")|not)]' file

推荐阅读