在这种情况下,我有一个原始的JSON,如下所示:
  
  {
  "taskDefinition": {
    "containerDefinitions": [
      {
        "name": "web",
        "image": "my-image",
        "environment": [
          {
            "name": "DB_HOST",
            "value": "localhost"
          },
          {
            "name": "DB_USERNAME",
            "value": "user"
          }
        ]
      }
    ]
  }
}
  
   我想就地修改匹配键的值,如下所示:
  
  
   
    jq '.taskDefinition.containerDefinitions[0].environment[] | select(.name=="DB_USERNAME") | .value="new"' json
   
  
  
   我得到了输出
  
  {
  "name": "DB_USERNAME",
  "value": "new"
}
  
   但是我想要更像是就地修改,或者是修改原始值的整个JSON,比如:
  
  {
      "taskDefinition": {
        "containerDefinitions": [
          {
            "name": "web",
            "image": "my-image",
            "environment": [
              {
                "name": "DB_HOST",
                "value": "localhost"
              },
              {
                "name": "DB_USERNAME",
                "value": "new"
              }
            ]
          }
        ]
      }
    }
  
   有可能吗
   
    jq
   
   或者任何已知的解决方法?
  
  
   谢谢您。
  
  
   
    更新的
   
  
  
   对于任何想要编辑多值的人,
这是我使用的方法
  
  JQ=""
for e in DB_HOST=rds DB_USERNAME=xxx; do
    k=${e%=*}
    v=${e##*=}
    JQ+="(.taskDefinition.containerDefinitions[0].environment[] | select(.name==\"$k\") | .value) |= \"$v\" | "
done
jq '${JQ%??}' json
  
   我认为应该有更简洁的方法,但这似乎很管用。