json - 使用重定向运算符通过 jq 更新文件内容

标签 json cygwin jq

我的 JSON 输入文件如下:

{
"Name":"SA",
"Password":"yyyyy",
"Mappings" : {
"RegionMap" : {
   "us-east-1"      : { "AMI" : "xxxxxx" },
   "us-east-2"      : { "AMI" : "" },
   "us-west-1"      : { "AMI" : "" },
   "us-west-2"      : { "AMI" : "" },
   "ca-central-1"   : { "AMI" : "" },
   "eu-central-1"   : { "AMI" : "" },
   "eu-west-1"      : { "AMI" : "" },
   "eu-west-2"      : { "AMI" : "" },
   "ap-south-1"     : { "AMI" : "" },
   "ap-southeast-1" : { "AMI" : "" },
   "ap-southeast-2" : { "AMI" : "" },
   "ap-northeast-1" : { "AMI" : "" },
   "ap-northeast-2" : { "AMI" : "" },
   "sa-east-1"      : { "AMI" : "" }       
   }
 }
}

我的任务是更新给定 json 文件中 us-east-1AMI 键的值,并将更新的文件创建为新文件。我正在使用jq带有重定向运算符的插件。它有+运算符,可用于覆盖对象中的内容。

我的预期输出是

{
"Name":"SA",
"Password":"yyyyy",
"Mappings" : {
"RegionMap" : {
   "us-east-1"      : { "AMI" : "abcd" },
   "us-east-2"      : { "AMI" : "" },
   "us-west-1"      : { "AMI" : "" },
   "us-west-2"      : { "AMI" : "" },
   "ca-central-1"   : { "AMI" : "" },
   "eu-central-1"   : { "AMI" : "" },
   "eu-west-1"      : { "AMI" : "" },
   "eu-west-2"      : { "AMI" : "" },
   "ap-south-1"     : { "AMI" : "" },
   "ap-southeast-1" : { "AMI" : "" },
   "ap-southeast-2" : { "AMI" : "" },
   "ap-northeast-1" : { "AMI" : "" },
   "ap-northeast-2" : { "AMI" : "" },
   "sa-east-1"      : { "AMI" : "" }       
   }
 }
}

我当前的命令未提供预期的输出,其输出如下:

jq '.Mappings.RegionMap + { "us-east-1":{"AMI":"abcd"}}' 
<OldfileName> > <Newfilename>

有人可以帮助我使用重定向运算符实现预期输出吗?

我正在 cygwin 环境和我的 jq 上运行该命令版本是 1.5

编辑

在密码 key 后添加了逗号

最佳答案

导致输入 json 无效的第一个问题是这一行(第三行):

...
"Password":"yyyyy"  <----
...

后面应该跟,

修复该问题后,您可以轻松更新所需的属性值:

jq '.Mappings.RegionMap["us-east-1"].AMI = "abcd"' oldfile > newfile

newfile 内容:

{
  "Name": "SA",
  "Password": "yyyyy",
  "Mappings": {
    "RegionMap": {
      "us-east-1": {
        "AMI": "abcd"
      },
      "us-east-2": {
        "AMI": ""
      },
      "us-west-1": {
        "AMI": ""
      },
      "us-west-2": {
        "AMI": ""
      },
      "ca-central-1": {
        "AMI": ""
      },
      "eu-central-1": {
        "AMI": ""
      },
      "eu-west-1": {
        "AMI": ""
      },
      "eu-west-2": {
        "AMI": ""
      },
      "ap-south-1": {
        "AMI": ""
      },
      "ap-southeast-1": {
        "AMI": ""
      },
      "ap-southeast-2": {
        "AMI": ""
      },
      "ap-northeast-1": {
        "AMI": ""
      },
      "ap-northeast-2": {
        "AMI": ""
      },
      "sa-east-1": {
        "AMI": ""
      }
    }
  }
}

关于json - 使用重定向运算符通过 jq 更新文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45061585/

相关文章:

python - Cygwin 上的 os.name 是什么?

json - 生成文件并替换生成文件中模板文件中的字符串

json - 如何使用 jq 从 JSON 字符串中选择日期范围?

arrays - 如何将命名列表转换为对象数组

json - 为什么 golang json number 不能像 "10"那样转换 int 或 string int?

javascript - JSON.parse() 如何能够解析为 JS 对象,而无需在 JSON 端点中实际定义对象属性?

windows - 在 cygwin 的参数中调用带有分号的批处理文件

python - 成功进行 SSH key 身份验证后,SSH 和 SCP 命令无法执行,并显示错误消息 : Win32 error 1114

javascript - 将变量从 python 传递到 javascript

java - 在java中构建树结构的json