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

如何在Shell中将多行JSON变量转换为单行?

解决Shell多行JSON变量转单行问题

问题根源

你之前的命令失效,核心原因是未加引号展开变量:echo $var1会让Shell把变量内的换行、连续空格替换成单个空格,还会触发分词,导致变量内容被截断或篡改,后续的tr和base64处理的是不完整的内容。

可行解决方案

方案1:用jq生成合法单行JSON(推荐)

jq是专业JSON处理工具,能自动转义字符串内的换行符,保证JSON语法完全合法,同时压缩为单行:

echo "$var1" | jq -c .
  • -c参数表示紧凑输出,即单行格式
  • 处理后,private_key字段内的换行会被转义为\n,既保留密钥内容,又符合JSON规范

方案2:手动删除换行并压缩空格(适合无jq环境)

如果没有安装jq,可以用基础工具组合,仅删除JSON结构的换行,同时避免破坏字符串内容:

echo "$var1" | tr -d '\n' | sed 's/[[:space:]]\+/ /g'
  • echo "$var1":带双引号输出,完整保留变量内的所有字符(包括换行和引号)
  • tr -d '\n':删除所有换行符
  • sed 's/[[:space:]]\+/ /g':将连续的空白字符(空格、制表符等)压缩为单个空格,保证JSON格式整洁

验证编码/解码完整性

如果需要转成单行后再base64编码,用以下流程确保内容完整:

# 生成单行JSON并编码
encoded_str=$(echo "$var1" | jq -c . | base64)
# 解码验证
echo "$encoded_str" | base64 -d

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:31:02