我有一个JSON文件,正在尝试向其中添加另一个字段。
JSON文件示例
{"data":{}}
查看其他答案
看起来很管用:
objectName="objName" cat $jsonFile | jq --arg objName $objectName '.data[$objName] += {"test": "json"}'
输出
{ "data": { "objName": { "test": "json" }
不出所料。
问题是我不能对JSON进行硬编码,所以我将字符串作为变量输入。但是我不能让语法工作:
objectName="objName" objJSON='{"test": "json"}' cat $jsonFile | jq -r --arg objName $objectName --arg jsonString $objJSON '.data[$objName] += $jsonString'
我得到了错误
上云精选
2核2G云服务器 每月9.33元起,个人开发者专属3年机 低至2.3折
使用 --argjson-
--argjson-
而不是-arg
当传递JSON而不是字符串时。
当有疑问时,引用您的字符串;这样,如果执行您的代码的shell不是您认为的那个shell,您的值就不会被忽略。(保持编写可移植代码所需的习惯也很有帮助;我在2000年代中期花了6个月的时间学习zsh后放弃它的全部原因是,在为其他shell编写代码时,我的代码质量受到了影响)。
objName="objName" objJSON='{"test": "json"}' echo '{"data":{}}' | jq --arg objectName "$objName" \ --argjson jsonString "$objJSON" \ '.data[$objectName] += $jsonString'
...properly发出:
{