首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >jq:通过shell变量追加JSON对象

jq:通过shell变量追加JSON对象
EN

Stack Overflow用户
提问于 2021-02-28 02:08:36
回答 1查看 351关注 0票数 0

我有一个JSON文件,正在尝试向其中添加另一个字段。

JSON文件示例

代码语言:javascript
运行
AI代码解释
复制
{"data":{}}

查看其他答案

看起来很管用:

代码语言:javascript
运行
AI代码解释
复制
objectName="objName"
cat $jsonFile | jq --arg objName $objectName '.data[$objName] += {"test": "json"}'

输出

代码语言:javascript
运行
AI代码解释
复制
{
  "data": {
    "objName": {
      "test": "json"
    }
  }
}

不出所料。

问题是我不能对JSON进行硬编码,所以我将字符串作为变量输入。但是我不能让语法工作:

代码语言:javascript
运行
AI代码解释
复制
objectName="objName"
objJSON='{"test": "json"}'
cat $jsonFile | jq -r --arg objName $objectName --arg jsonString $objJSON '.data[$objName] += $jsonString'

我得到了错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-28 02:23:35

使用--argjson-

而不是-arg

当传递JSON而不是字符串时。

当有疑问时,引用您的字符串;这样,如果执行您的代码的shell不是您认为的那个shell,您的值就不会被忽略。(保持编写可移植代码所需的习惯也很有帮助;我在2000年代中期花了6个月的时间学习zsh后放弃它的全部原因是,在为其他shell编写代码时,我的代码质量受到了影响)。

代码语言:javascript
运行
AI代码解释
复制
objName="objName"
objJSON='{"test": "json"}'
echo '{"data":{}}' |
  jq --arg     objectName "$objName" \
     --argjson jsonString "$objJSON" \
    '.data[$objectName] += $jsonString'

...properly发出:

代码语言:javascript
运行
AI代码解释
复制
{
  "data": {
    "objName": {
      "test": "json"
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66405239

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档