如何使用JQ过滤JSON文件中的对象的子对象中的某些数组

时间:2019-04-11 14:55:28

标签: json jq

我需要使用嵌套的strucutre过滤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"
    ]
  }
}

2 个答案:

答案 0 :(得分:1)

selectcontains一起使用:

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

答案 1 :(得分:0)

或者,您可以考虑使用基于步行路径的Unix实用程序 jtc

bash $ <file.json jtc -w'[a][b][x]:<z>R:[-1]' -p
{
   "a": {
      "b": [
         {
            "c": "1",
            "x": "aaa"
         }
      ]
   },
   "d": {
      "e": [
         "1"
      ],
      "f": [
         "2"
      ]
   }
}
bash $