首页 > 解决方案 > 使用 jq(bash 脚本)更新 JSON 文件

问题描述

需要一些帮助来使用 jq 命令更改 JSON 文件中的值。

错误:

[jenkins@devops-dev-02 New]$ jq 'map(if .Tags[11].Key == "Period" then .Tags[11].Value = "Weekly" else . end)' create_snapshot.json
jq: error (at create_snapshot.json:54): Cannot index string with string "Tags"
[jenkins@devops-dev-02 New]$

JSON文件:

{
   "DBSnapshotIdentifier":"snapshot-myrds-backup-1",
   "DBInstanceIdentifier":"myrds",
   "Tags":[
      {
         "Key":"Name",
         "Value":"snapshot-myrds-backup-1"
      },
      {
         "Key":"Application",
         "Value":"myapp"
      },
      {
         "Key":"Environment",
         "Value":"Dev and QA"
      },
      {
         "Key":"Period",
         "Value":"Daily"
      }
   ]
}

标签: jsonjq

解决方案


当你调用map()一个字典时,你只对它的值进行操作,把键扔掉。该值"snapshot-myrds-backup-1"没有.Tags,您也不能获取该不存在Tags条目的第 11 项。


你在这里想要的是:

.Tags |= map(if .Key == "Period" then .Value = "Weekly" else . end)

map()通常用于遍历数组;对于 JSON 对象,map_values()通常用于“映射”对象的值,同时保留键,除了那些值映射到empty.


推荐阅读