首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jq将JSON数组条目添加到JSON对象中?

如何使用jq将JSON数组条目添加到JSON对象中?
EN

Stack Overflow用户
提问于 2022-03-21 10:57:59
回答 1查看 70关注 0票数 0

我正在编写一个用于清理Route53记录的脚本,因此我想将数组中的条目添加到JSON对象中,如下所示

outer.json

代码语言:javascript
复制
{
  "Comment": "Delete record sets for $cluster_name",
  "Changes": [
    {
      "Action": "DELETE",
      "ResourceRecordSet": {}
    }
  ]
}

records.json

代码语言:javascript
复制
[
  {
    "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

代码语言:javascript
复制
{
  "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完成的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-21 11:06:43

通过在其|=项的ResourceRecordSet字段中添加第二个文件的数组项input[]来更新.Changes数组

代码语言:javascript
复制
jq '.Changes |= [first | .ResourceRecordSet += input[]]' outer.json records.json
代码语言:javascript
复制
{
  "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.jsonResourceRecordSet总是空的,你最好只做一个赋值=,而不是一个更新的加法+=

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71556455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档