【问题标题】:How to add a new JSON object in an existing JSON file using jq and variable arguments如何使用 jq 和可变参数在现有 JSON 文件中添加新 JSON 对象
【发布时间】:2022-10-23 06:47:55
【问题描述】:

我这里有一个 json,它看起来像:

{
  "cluster": "bvt-rtp-123",
  "state": "installed",
  "timestamp": "2022-02-14T10:23:01Z"
}

我想使用参数/环境变量使用jq 将对象动态添加到该 JSON 对象 结果应如下所示:

{
  "cluster": "bvt-rtp-123",
  "state": "installed",
  "timestamp": "2022-02-14T10:23:01Z",
  "aiops": {
    "catalog_source": "abc.com/123",
    "channel": "dev"
  }
}

其中aiopscatalog_sourcechannel通过环境变量以这种方式参数化:

parent_key=aiops
child_key=catalog_source
child_val=abc.com/123

这个方法我已经试过了 cat test.json | jq --arg parent "$parent_key" --arg child "$child_key" --arg child_val "$payload_val" '.[$key].[$child] = $child_val' 但它抛出了这个错误:

jq: error: syntax error, unexpected '[', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.[$key].[$child] = $child_val        
jq: 1 compile error

【问题讨论】:

    标签: json bash shell jq


    【解决方案1】:

    使用--arg 定义它们,然后使用+= 设置它们。这样您就可以随时添加更多子项。

    jq --arg parent_key aiops 
       --arg child_key catalog_source 
       --arg child_val abc.com/123 
       '.[$parent_key] += {($child_key): $child_val}' input.json
    
    {
      "cluster": "bvt-rtp-123",
      "state": "installed",
      "timestamp": "2022-02-14T10:23:01Z",
      "aiops": {
        "catalog_source": "abc.com/123"
      }
    }
    

    Demo 用于 jq 过滤器(使用变量声明模拟参数输入)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 2018-08-05
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多