代码之家  ›  专栏  ›  技术社区  ›  mfaiz

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

  •  0
  • mfaiz  · 技术社区  · 7 年前

    我正在尝试获取一个现有的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"}]

    1 回复  |  直到 7 年前
        1
  •  1
  •   peak    7 年前

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

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