jq - массив фильтров не содержит - PullRequest
0 голосов
/ 28 ноября 2018

Я использую приложение jq для фильтрации файлов json из командной строки.

https://stedolan.github.io/jq/

Вот плохой пример, который представляет проблему.Как мне отфильтровать этот набор, чтобы включить в него все фрукты, которые не являются красными или не круглыми?

fruit.json:

[
  {
    "name": "banana",
    "tags": [
      "yellow",
      "long"
    ]
  },
  {
    "name": "apple",
    "tags": [
      "red",
      "round"
    ]
  },
  {
    "name": "orange",
    "tags": [
      "orange",
      "round",
      "colored"
    ]
  }
]

Это находит все красные фрукты:

jq '.[] | select(.tags[] == "red")' fruit.json

Как мне найти все фрукты, которые не красные?

Да, я знаю, что в этом примере массив тегов для разных целей не очень хороший дизайн.У реальных данных есть массив по уважительной причине.Я просто ищу, как искать записи, где массив не содержит значения.

Это дает странные результаты, в том числе дубликаты, которые включают в себя «яблоко», так как «раунд» не является «красным», поэтомусовпадения.

jq '.[] | select(.tags[] != "red")' fruit.json

Предложения?

1 Ответ

0 голосов
/ 28 ноября 2018

Это должно работать:

jq '.[] | select(.tags | index("red") | not)' fruit.json

Когда вы делаете .tags[], он будет проходить по всем элементам в массиве tags один за другим, поэтому вы получаете дублированные результаты.

...