剥离JSON元素并向其添加新元素

剥离JSON元素并向其添加新元素,json,shell,jq,Json,Shell,Jq,我正在尝试获取一个现有的JSON元素,并创建一个新的JSON元素,其中包含一个键的附加值 我知道我可以使用许多其他工具来实现这一点,但我想知道,仅仅使用jq是否可以实现这一点 输入json文件: { "entries": [ { "uuid": "1a03", "enabled": true, "autoname": true, "name": "LBC", "number": 0, "epgauto": tru

我正在尝试获取一个现有的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],编号:mynew,uuid:4a05}]

完成任务的一种方法是:首先创建一个包含感兴趣字段的对象,然后更新。tags:


太神了我可以做些什么来检查我添加的值是否已经存在?当然可以。您可能希望通过jq教程来学习,并熟悉在线手册。只需点击页面顶部的链接即可
.entries[]
| select(.uuid=="4a05") 
| {tags, uuid, number: "mynew##"}
| .tags += ["MYNEWVALUE"]