首页 > 解决方案 > 剥离 JSON 元素并向其添加新元素

问题描述

我正在尝试采用现有的 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": ""
    },...]
}

然后,我将其过滤为我想要的对象,然后返回单个对象。

我没有成功尝试使用 map "+" 运算符添加值我认为我的语法可能是错误的

我正在使用它来过滤我想要的对象

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

如果我最终过滤,我想创建以下输出uuid=4a05

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

标签: jsonshelljq

解决方案


这是完成任务的一种方法 - 首先使用感兴趣的字段创建一个对象,然后更新.tags

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

推荐阅读