Удаление элемента JSON и добавление в него нового - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь взять существующий элемент JSON и создать новый с дополнительным значением ключа.

Я знаю, что могу использовать множество других инструментов для этого, но мне интересно, возможно ли это только с помощью jq

входной JSON-файл:

{
  "entries": [
    {
      "uuid": "1a03",
      "enabled": true,
      "autoname": true,
      "name": "LBC",
      "number": 0,
      "epgauto": true,
      "epggrab": [],
      "dvr_pre_time": 0,
      "dvr_pst_time": 0,
      "epg_running": -1,
      "services": [
        "ea8"
      ],
      "tags": [
        "0a7"
      ],
      "bouquet": ""
    },
    {
      "uuid": "4a05",
      "enabled": true,
      "autoname": true,
      "name": "Radio X",
      "number": 0,
      "epgauto": true,
      "epggrab": [],
      "dvr_pre_time": 0,
      "dvr_pst_time": 0,
      "epg_running": -1,
      "services": [
        "9d36"
      ],
      "tags": [
        "08fa7"
      ],
      "bouquet": ""
    },...]
}

Затем я фильтрую это для объекта, который я хочу, который затем возвращает один объект.

Я безуспешно пытался использовать оператор "+" для добавления значений. Я думаю, что мой синтаксис может быть неправильным

Я использую это для фильтрации объекта, который я хочу

.entries[] | select(.uuid=="4a05")

Я хочу создать следующий вывод, если я в итоге отфильтровал uuid=4a05

[{"tags":["08fa7","MYNEWVALUE"],"number":mynew##,"uuid":"4a05"}]

1 Ответ

0 голосов
/ 08 января 2019

Вот один из способов выполнить задачу - сначала создать объект с интересующими полями, а затем обновить .tags:

.entries[]
| select(.uuid=="4a05") 
| {tags, uuid, number: "mynew##"}
| .tags += ["MYNEWVALUE"]
...