Macos jq:通过shell变量追加JSON对象
我有一个JSON文件,我正在尝试向其中添加另一个字段 JSON文件示例: 看看其他答案,Macos jq:通过shell变量追加JSON对象,macos,shell,zsh,jq,Macos,Shell,Zsh,Jq,我有一个JSON文件,我正在尝试向其中添加另一个字段 JSON文件示例: 看看其他答案,+=似乎有效: objectName="objName" cat $jsonFile | jq --arg objName $objectName '.data[$objName] += {"test": "json"}' 输出 { "data": { "objName": { &qu
+=
似乎有效:
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'
我在第1行:“json”}处收到错误jq:error:syntax error,意外的无效字符,期望$end(Unix shell引用问题?)
--argjson
而不是--arg
…正确地发射:
{
"data": {
"objName": {
"test": "json"
}
}
}
嗯,有了这个,我得到了
jq:invalid JSON text传递给--argjson Use jq--help获取命令行选项的帮助
objJSON='{“test”:“JSON”}
等等,我想我的JSON的大写形式不同于你的srunset-x
,告诉你的shell启用跟踪,这样你就可以看到它实际传递的参数了。让我们来看看。
objName="objName"
objJSON='{"test": "json"}'
echo '{"data":{}}' |
jq --arg objectName "$objName" \
--argjson jsonString "$objJSON" \
'.data[$objectName] += $jsonString'
{
"data": {
"objName": {
"test": "json"
}
}
}