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"
    }
  ]
}
 
 
0人点赞
 
 


作者:CodingCode
链接:https://www.jianshu.com/p/2ea233708b1d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @   技术颜良  阅读(596)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2019-08-02 axios和drf结合的增删改查
点击右上角即可分享
微信分享提示