Использование JQ с «содержит» в «выбрать» внутри «Del» не работает - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь удалить некоторые записи из dict в json. Он работает с использованием ==, но с содержимым не работает.

Вызов Jq работает:

jq 'del(.entries[] | select(.var == "foo"))' input.json

Вызов Jq не работает:

jq 'del(.entries[] | select(.var | contains("foo")))' input.json

input. json:

{
  "entries": [
    {
      "name": "test1",
      "var": "foo"
    },
    {
      "name": "test2",
      "var": "bar"
    }
  ]
}

Вывод:

{
  "entries": [
    {
      "name": "test2",
      "var": "bar"
    }
  ]
}

Результат jq '.entries[] | select(.var == "foo")' input.json и jq '.entries[] | select(.var | contains("foo"))' input.json одинаков, поэтому я думаю, что два del -колла должны также работа.

Это ошибка в JQ или я что-то не так?

1 Ответ

2 голосов
/ 11 февраля 2020

Это, должно быть, ошибка, так как кажется, что она отлично работает на jq 1.6 (, попробуйте здесь ).

Если вы не можете обновить до jq 1.6, вы должен иметь возможность использовать следующую команду, которую я успешно протестировал на jq 1.5:

jq '.entries |= map(select(.var | contains("foo") | not))' file.json
...