Bash数组转JSON字符串遇嵌套异常,求正确转换方法
Bash数组转JSON字符串问题解决
分两种场景处理:
1. 若output是真正的Bash数组
首先纠正Bash数组的正确定义——Bash里数组赋值不能有空格,元素不需要用方括号包裹,正确写法是:
# 普通元素的数组定义 output=(one two) # 元素含空格等特殊字符时,用单引号包裹 output=('one item' 'two items')
要把这个数组转成JSON字符串,用你之前的命令就能得到正确结果:
json_str=$(jq -c -n '$ARGS.positional' --args "${output[@]}")
执行后json_str的值就是["one","two"],不会出现嵌套。你之前得到嵌套结果,是因为当时output并不是真正的数组,而是一个包含JSON字符串的单个变量。
2. 你的实际场景:output是字符串形式的JSON
你后来发现output实际是'["one","two"]'这种格式——也就是它本身就是一个JSON字符串,只是被Bash当成普通字符串存储了。这时候处理更简单:
直接赋值:如果确认
output的内容是合法JSON,直接把它赋值给目标变量即可:json_str="$output"此时
json_str的值就是你想要的["one","two"]。用jq验证并标准化:如果需要确保字符串是合法JSON,或者要重新压缩格式,可以用
jq解析原始字符串:json_str=$(echo "$output" | jq -c fromjson)这个命令会把原始字符串解析成JSON对象,再输出压缩后的格式;如果
output不是合法JSON,会直接报错提示。
注意事项
- Bash变量赋值时,等号前后不能有空格,比如
json_str=$(...)是正确写法,json_str = $(...)会报错。 - 用
jq处理变量时,用双引号包裹变量("$output")可以避免特殊字符导致的转义问题。
内容的提问来源于stack exchange,提问作者Abdul Ahmad
相关产品推荐
相关产品推荐

