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

如何在Bash中将格式化JSON转为无空格换行的压缩格式?

解决方案:将格式化JSON转为紧凑格式用于Bash命令

要把格式化的JSON转成无冗余空格、无换行的紧凑格式,最稳妥的方式是用专门的JSON处理工具,避免手动正则破坏JSON结构。下面给你几种实用方法:

1. 推荐:用jq(最可靠的JSON工具)

jq是处理JSON的标准工具,几乎所有Linux发行版都能通过包管理器安装(比如apt install jq或yum install jq)。它能安全压缩JSON,不会误处理字符串内的空格或特殊字符:

直接输出紧凑JSON

jq -c . your_formatted.json

-c参数表示"compact output",会把整个JSON压缩成一行,自动移除不必要的空格和换行。

在脚本中使用示例

假设你的foo.sh原本是这样(无法正常工作,因为格式化JSON的换行/空格会被Shell拆分):

# 错误示例:格式化JSON作为参数会被Shell拆分
some_function "$(cat file.json)"

改成用jq后:

# 正确示例:传递紧凑格式的JSON字符串
COMPACT_JSON=$(jq -c . file.json)
some_function "$COMPACT_JSON"

2. 备用:用Python(无需额外安装)

如果系统没有jq,Python是几乎所有Linux/macOS系统都预装的工具,同样能安全处理JSON:

方法一:用内置的json.tool

python -m json.tool --compact file.json

--compact参数会直接输出紧凑格式的JSON。

方法二:用单行脚本

python -c "import json, sys; print(json.dumps(json.load(sys.stdin)))" < file.json

这个命令从标准输入读取格式化JSON,然后输出紧凑版本。

3. 不推荐:用sed/awk(仅限简单JSON)

如果你的JSON结构非常简单(字符串内没有空格、换行或特殊字符),可以用sed做粗暴替换,但绝对不推荐用于复杂JSON(会破坏字符串内的空格):

sed ':a;N;$!ba;s/\s\+//g' file.json

这个命令会把所有空白字符(空格、换行、制表符)全部移除,但如果JSON里有"description": "hello world"这样的字符串,会变成"description":"helloworld",完全破坏原意。

示例验证

假设你的格式化file.json是:

{
  "key1": "value with space",
  "key2": 456,
  "key3": ["a", "b", "c"]
}

用jq -c . file.json会输出:

{"key1":"value with space","key2":456,"key3":["a","b","c"]}

这个结果可以安全地作为参数传递给其他函数,不会被Shell拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:21:36