You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何含空格的参数化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:45:54