以输入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"
    }
  ]
}