Как отфильтровать некоторый массив в подобъекте с объектом в файле JSON с помощью JQ - PullRequest
0 голосов
/ 11 апреля 2019

Мне нужно отфильтровать JSON с вложенными структурами, как показано ниже.Все объекты в массиве b, где атрибут x содержит «z» в значении x, должны быть отфильтрованы.Остальные должны остаться в файле.

{
    "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 ]

1 голос
/ 11 апреля 2019

использовать select с contains:

jq '.a.b|=[.[]|select(.x|contains("z")|not)]' file
0 голосов
/ 19 апреля 2019

в качестве альтернативы вы можете рассмотреть возможность использования утилиты 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 $ 
...