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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:25:55