更新内容
问题描述:
我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-1
的AMI
关键的价值,创造更新的文件作为新文件。我正在使用带重定向操作符的jq插件。它有+运算符,可以用于对象中的overwrite
内容。
我expected
输出
{
"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
。
编辑
增加了密码钥匙
答
的第一个问题,让您的输入JSON无效后一个逗号是这条线(3号线):
...
"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": ""
}
}
}
}
@RomanPerekrest感谢。有效。另请参阅我的编辑 – shubhamagiwal92
@ shubhamagiwal92,不客气 – RomanPerekhrest
不是什么大不了的事情,但在这种情况下,我只会使用简单的赋值'=',因为您正在分配固定值。如果您需要当前值来确定新值,我会保留'| =''。 –