首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jq和变量参数在现有JSON文件中添加新的JSON对象

如何使用jq和变量参数在现有JSON文件中添加新的JSON对象
EN

Stack Overflow用户
提问于 2022-02-14 12:35:07
回答 1查看 387关注 0票数 0

我这里有个json,看上去:

代码语言:javascript
复制
{
  "cluster": "bvt-rtp-123",
  "state": "installed",
  "timestamp": "2022-02-14T10:23:01Z"
}

我想使用参数/环境变量来使用jq动态地向那个JSON对象添加一个对象,结果应该如下所示:

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

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

代码语言:javascript
复制
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',但是它抛出了这个错误:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-14 12:41:00

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

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

jq过滤器的演示 (用变量声明模拟参数输入)

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

https://stackoverflow.com/questions/71112010

复制
相关文章

相似问题

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