如何以最简洁方式从单层JSON提取多属性并赋值给Bash变量
提取JSON顶层属性到Bash变量的简洁方案
针对提取JSON顶层属性到Bash变量时,sed/tr处理无法兼容含空格的值、多次调用jq不够高效的问题,推荐用jq一次性生成Bash赋值语句,再通过eval执行的方案,既能处理特殊字符,又只调用一次jq,完全适配50个顶层属性的场景。
具体实现
假设待处理的JSON内容如下:
{ "a": 1, "b": "x y" }
- 把JSON内容存入变量(或读取自文件):
json='{ "a": 1, "b": "x y" }'
- 用jq生成并执行赋值语句:
eval "$(jq -r '@sh "a=\(.a) b=\(.b)"' <<< "$json")"
关键说明
@sh是jq的内置过滤器,会自动对字符串值做转义处理,确保空格、引号等特殊字符能被Bash正确解析;- 一次性列出所有需要提取的属性(比如50个就写成
"var1=\(.var1) var2=\(.var2) ... var50=\(.var50)"),仅调用一次jq,效率极高; - 执行后直接通过变量名访问对应值,比如:
echo "a的值:$a" # 输出 a的值:1 echo "b的值:$b" # 输出 b的值:x y
注意事项
如果JSON来源不可信,需谨慎使用eval,避免命令注入风险;若为可信数据源,该方案是当前最简洁高效的选择。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

