为何含空格的参数化JSON无法被JQ解析?
问题分析与解决
问题根源
当你把带空格的BAD_JSON='{"key": $VALUE}'直接传给jq时,Bash/Zsh会按空格分割字符串,把它拆成{"key:和$VALUE}两个独立参数。jq接收到不完整的片段后,自然会触发语法错误。而不带空格的GOOD_JSON会被shell当作单个完整参数传递,所以jq能正常解析。
解决办法
办法1:用双引号包裹JSON变量传递
把$BAD_JSON用双引号括起来,强制shell将其视为单个完整参数:
VALUE="1234" BAD_JSON='{"key": $VALUE}' jq -n --arg VALUE "$VALUE" "$BAD_JSON"
办法2:直接用jq构造JSON(推荐)
没必要把JSON模板存在shell变量里,直接用jq原生语法生成更可靠,彻底规避shell解析空格的问题:
VALUE="1234" jq -n --arg VALUE "$VALUE" '{"key": $VALUE}'
办法3:用数组存储模板(复杂场景适用)
如果JSON模板逻辑更复杂,可将其存入数组,确保参数传递的完整性:
VALUE="1234" BAD_JSON=('{"key": $VALUE}') jq -n --arg VALUE "$VALUE" "${BAD_JSON[@]}"
内容的提问来源于stack exchange,提问作者JHarnach
相关产品推荐
相关产品推荐

