Как удалить элементы массива, которые заканчиваются на 1? - PullRequest
0 голосов
/ 29 октября 2018

Мне нужно удалить все элементы массива, у которых поле name заканчивается на 1.

Введите:

{
  "foo": "bar",
  "data": {
    "code": "abc123",
    "items": [
      {
        "name": "exp1"
      },
      {
        "name": "exp2"
      },
      {
        "name": "exp11"
      }
    ]
  }
}

Желаемый выход:

{
  "foo": "bar",
  "data": {
    "code": "abc123",
    "items": [
      {
        "name": "exp2"
      }
    ]
  }
}

Моя попытка:

jq 'del(.data.items[] | select(.name | endswith("1")))' input

Что приводит к Invalid path expression.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018
  1. Ваша попытка будет работать с последними версиями jq (то есть более свежими, чем версия 1.5).

  2. Еще один вариант (возможно, самая краткая надежная альтернатива):

    .data.items|=map(select(.name|test("[^1]$")))

0 голосов
/ 29 октября 2018

Вы можете использовать этот фильтр jq:

jq '.data.items|=map(select(.name|endswith("1")|not))' file

Это заменит .data.items новым массивом с объектами, чьи name s не заканчиваются на 1.

...