jq:通过 shell 变量追加 JSON 对象
jq: Append JSON object via shell variable
我有一个 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'
我遇到错误 jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1: "json"}
在传递 JSON 而不是字符串时使用 --argjson
而不是 --arg
。
如有疑问,请引用您的字符串;这样一来,如果执行代码的 shell 不是您认为的代码,您的值就不会被篡改。 (保持编写可移植代码所必需的习惯也很有帮助;我在 2000 年代中期花了 6 个月学习 zsh 后放弃 zsh 的全部原因是我为其他 shell 编写的代码质量受到影响) .
objName="objName"
objJSON='{"test": "json"}'
echo '{"data":{}}' |
jq --arg objectName "$objName" \
--argjson jsonString "$objJSON" \
'.data[$objectName] += $jsonString'
...正确发出:
{
"data": {
"objName": {
"test": "json"
}
}
}
我有一个 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'
我遇到错误 jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1: "json"}
在传递 JSON 而不是字符串时使用
--argjson
而不是--arg
。如有疑问,请引用您的字符串;这样一来,如果执行代码的 shell 不是您认为的代码,您的值就不会被篡改。 (保持编写可移植代码所必需的习惯也很有帮助;我在 2000 年代中期花了 6 个月学习 zsh 后放弃 zsh 的全部原因是我为其他 shell 编写的代码质量受到影响) .
objName="objName"
objJSON='{"test": "json"}'
echo '{"data":{}}' |
jq --arg objectName "$objName" \
--argjson jsonString "$objJSON" \
'.data[$objectName] += $jsonString'
...正确发出:
{
"data": {
"objName": {
"test": "json"
}
}
}