我正在编写一个用于清理Route53记录的脚本,因此我想将数组中的条目添加到JSON对象中,如下所示
outer.json
{
"Comment": "Delete record sets for $cluster_name",
"Changes": [
{
"Action": "DELETE",
"ResourceRecordSet": {}
}
]
}records.json
[
{
"Name": "abcde_svcx.$cluster_name.domain.com.",
"Type": "TXT",
"TTL": 300,
"ResourceRecords": [
{
"Value": "\"heritage=external-dns,external-dns/owner=$cluster_name,external-dns/resource=service/svcx/svcx-cluster\""
}
]
},
{
"Name": "svcx.$cluster_name.domain.com.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "123456789",
"DNSName": "some-value.elb.us-east-2.amazonaws.com.",
"EvaluateTargetHealth": true
}
}
]我想要的输出如下:
output.json
{
"Comment": "Delete record sets for $cluster_name",
"Changes": [
{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "abcde_svcx.$cluster_name.domain.com.",
"Type": "TXT",
"TTL": 300,
"ResourceRecords": [
{
"Value": "\"heritage=external-dns,external-dns/owner=$cluster_name,external-dns/resource=service/svcx/svcx-cluster\""
}
]
}
},
{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "svcx.$cluster_name.domain.com.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "123456789",
"DNSName": "some-value.elb.us-east-2.amazonaws.com.",
"EvaluateTargetHealth": true
}
}
}
]
}这是可以在shell脚本中使用jq完成的吗?
发布于 2022-03-21 11:06:43
通过在其|=项的ResourceRecordSet字段中添加第二个文件的数组项input[]来更新.Changes数组
jq '.Changes |= [first | .ResourceRecordSet += input[]]' outer.json records.json{
"Comment": "Delete record sets for $cluster_name",
"Changes": [
{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "abcde_svcx.$cluster_name.domain.com.",
"Type": "TXT",
"TTL": 300,
"ResourceRecords": [
{
"Value": "\"heritage=external-dns,external-dns/owner=$cluster_name,external-dns/resource=service/svcx/svcx-cluster\""
}
]
}
},
{
"Action": "DELETE",
"ResourceRecordSet": {
"Name": "svcx.$cluster_name.domain.com.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "123456789",
"DNSName": "some-value.elb.us-east-2.amazonaws.com.",
"EvaluateTargetHealth": true
}
}
}
]
}注意:如果outer.json的ResourceRecordSet总是空的,你最好只做一个赋值=,而不是一个更新的加法+=。
https://stackoverflow.com/questions/71556455
复制相似问题