如何通过单次调用提取JSON对象的key和value并存储到变量
单次调用jq提取JSON字段并存入变量
这里提供几种适配不同场景的实现方式,均只需一次jq调用即可完成:
方法1:基础换行分隔读取
适合字段内容无空格或特殊字符的简单场景:
read -r key value <<< "$(jq -r '.key, .value' input.json)"
执行后,$key 会存储hello,$value存储world。jq通过, 分隔两个字段,依次输出两个值(每行一个),read -r会按换行/空格将值分别存入对应变量。
方法2:Null字符分隔(兼容含特殊字符的字段)
如果字段内容包含空格、换行或引号等特殊字符,用null字符分隔能避免赋值错误:
read -r -d '' key value <<< "$(jq -r '.key + "\u0000" + .value' input.json)"
-d ''参数让read以null字符作为值的分隔符,彻底规避特殊字符带来的解析问题。
方法3:Shell安全赋值(最推荐)
利用jq的@sh过滤器自动转义Shell特殊字符,结合eval直接完成变量赋值,适配所有复杂场景:
eval "$(jq -r '@sh "key=\(.key) value=\(.value)"' input.json)"
@sh会将字段内容转义为符合Shell语法的字符串,确保即使字段包含引号、空格等特殊字符,也能被正确赋值到变量中。
验证变量:执行echo $key和echo $value,会分别输出hello和world。
内容的提问来源于stack exchange,提问作者unbox-us
相关产品推荐
相关产品推荐

