bash JQ.如何修改包含对象列表的json文件中的键值对?

pun*_*pun 3 bash shell json jq

我正在使用jq处理大型json文件.它看起来像这样:

FILE1.json

{
  "person": [
      {
          "name": "sam",
          "age": "40",
          "weight": "180",
          "height": "6"
       },
       {
          "name": "peter",
          "age": "41",
          "weight": "180",
          "height": "6.1"
       },
       {
          "name": "mike",
          "age": "40",
          "weight": "200",
          "height": "5.9"
       },
       {
          "name": "ethan",
          "age": "41",
          "weight": "190",
          "height": "6"
       }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想使用jq工具将权重值从200更改为195,其中name为"mike".
我怎样才能做到这一点?

Jef*_*ado 6

我们的想法是更新person数组,其中具有该名称的对象"mike"将被修改为具有该名称的对象weight "195".否则它就被跳过了.

.person |= map(
    if .name == "mike"
        then .weight = "195"
        else .
    end)
Run Code Online (Sandbox Code Playgroud)

或者更简洁地,搜索更新和更新它们的人员:

(.person[] | select(.name == "mike")).weight = "195"
Run Code Online (Sandbox Code Playgroud)