jq基本用法:修改访问

jq的基本用法:修改访问

以输入t.json为例:

{
  "F1": 9,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522"
    }
  ]
}

修改字段

$ jq '.F1=100' t.json  
{
  "F1": 100,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522"
    }
  ]
}

$ jq '.F5[1].F52="new value"' t.json                  
{
  "F1": 9,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "new value"
    }
  ]
}

增加字段

$ jq '.F3="new value"' t.json        
{
  "F1": 9,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522"
    }
  ],
  "F3": "new value"
}

$ jq '.F5[1].F53="new value"' t.json 
{
  "F1": 9,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522",
      "F53": "new value"
    }
  ]
}

增加数组和map

$ jq '.F5[2]={"F51": 513, "F52": "F523"}' t.json      
{
  "F1": 9,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522"
    },
    {
      "F51": 513,
      "F52": "F523"
    }
  ]
}

如果数组是简单类型:

$ jq . t.json
{
  "F3": [
    "F31",
    "F32"
  ]
}
$ jq '.F3[2]="F33"' t.json
{
  "F3": [
    "F31",
    "F32",
    "F33"
  ]
}

增加数组元素

利用length函数得到数组的长度,然后把值设置到当前位置。

$ jq '.F3[.F3|length]="NEWValue"' t.json

删除

使用del函数删除元素,包括基本元素,对象和数组元素。

$ jq 'del(.F1)' t.json 
{
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522"
    }
  ]
}

$ jq 'del(.F5[1].F52)' t.json    
{
  "F1": 9,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512
    }
  ]
}

删除一个数组成员:

$ jq 'del(.F5[1])' t.json    
{
  "F1": 9,
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    }
  ]
}

删除数组成员

$ cat t.json
{
  "F": [
    "F0",
    "F1",
    "F2",
    "F3",
    "F4",
    "F5"
  ]
}
$ jq 'del(.F)' t.json  # delete field F
{}
$ jq 'del(.F[])' t.json  # delete members of field F
{
  "F": []
}
$ jq 'del(.F[0])' t.json  # delete member of fields F[0]
{
  "F": [
    "F1",
    "F2",
    "F3",
    "F4",
    "F5"
  ]
}
$ jq 'del(.F[0,2,4])' t.json  # delete member of fields F[0], F[2], and F[4]
{
  "F": [
    "F1",
    "F3",
    "F5"
  ]
}

执行多次修改

使用("|")连接多个命令。
连接符("|")功能类似shell里面的("|"),把前面命令的输出作为后面命令的输入。

$ jq 'del(.F1) | del(.F5[1])' t.json              
{
  "F2": "F21",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    }
  ]
}

修改多个字段:

$ jq '.F1="New F1" | .F2="New F2"' t.json
{
  "F1": "New F1",
  "F2": "New F2",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522"
    }
  ]
}

或者:

$ jq '. +{F1: "New Fa", F2: "New F2"}' t.json
{
  "F1": "New Fa",
  "F2": "New F2",
  "F5": [
    {
      "F51": 511,
      "F52": "F521"
    },
    {
      "F51": 512,
      "F52": "F522"
    }
  ]
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,339评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 10,050评论 0 5
  • 新学期开学将近一个月了,每个班级也都开始了新学期的教学任务中,一级班的孩子学习氛围高涨,而最引起我注意的是年仅三岁...
    万花谷阅读 1,414评论 0 0
  • 从去年七月份走出校园到现在我已经失业三次了,当然如果说有工资的工作才算失业,那么我只能算一次,毕竟上次发工资已经是...
    木兰不姓花阅读 3,821评论 4 7
  • 阿尔他霞的爱鸟情结 秋天来了,天气变得既不太冷也不太热。天空似乎一下子就高远了许多,远处田野里忙碌的人们也比往常多...
    阿尔他霞阅读 3,693评论 2 3

友情链接更多精彩内容