【问题标题】:How to add new field to JSON with jq based on other values如何基于其他值使用 jq 向 JSON 添加新字段
【发布时间】:2021-10-14 12:33:51
【问题描述】:

假设我有以下 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


    【解决方案1】:

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

    $ 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"
      }
    ]
    

    【讨论】:

    • 很好,谢谢。只需要将我的原始输出转换为数组
    • 除了将输入文件转换为数组之外,您还可以调用 jq 并使用 -s 选项将其自动读入数组。
    • @pmf 我不认为-s 会起作用,因为每个对象都用逗号分隔(,)。
    • @andlrc 确实,很好看!我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    相关资源
    最近更新 更多