首页 > 解决方案 > 如何基于其他值使用 jq 向 JSON 添加新字段

问题描述

假设我有以下 JSON:

{
  "Address": "myaddress1.com",
  "Port": 6379
},
{
  "Address": "myaddress2.com",
  "Port": 6379
}

我想连接端口和地址,并预先和附加一些仅使用 jq 实现的文本。例如,我希望新输出为:

{
  "Address": "myaddress1.com",
  "Port": 6379,
  "FullAddress": "redis://myaddress1.com:6379
},
{
  "Address": "myaddress2.com",
  "Port": 6379,
  "FullAddress": "redis://myaddress2.com:6379
}

这是否可能仅使用 JQ 或者我需要使用脚本语言?

标签: jq

解决方案


假设您的输入文件实际上是一个对象数组,那么以下内容可能对您有用:

$ jq 'map(. + { "FullAddress": "redis://\(.Address):\(.Port)" })' input.json
[
  {
    "Address": "myaddress1.com",
    "Port": 6379,
    "FullAddress": "redis://myaddress1.com:6379"
  },
  {
    "Address": "myaddress2.com",
    "Port": 6379,
    "FullAddress": "redis://myaddress2.com:6379"
  }
]

推荐阅读