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

如何在Shell脚本及Bash控制台中压缩JSON?

在Bash控制台压缩JSON的实用方法

我刚好也经常遇到这种需求——把带空格换行的JSON压缩成紧凑格式,方便直接内联传给httpie这类工具用!下面给你几个亲测好用的方法:

方法1:用jq(最推荐,功能强大)

jq是Linux/macOS下处理JSON的神器,几乎所有发行版都能通过包管理器安装(比如apt install jq或者brew install jq)。压缩JSON的命令超简单:

如果是处理文件:

jq -c '.' input.json

如果是直接管道输入(比如你给出的示例):

echo '{ "foo": "lorem", "bar": "ipsum" }' | jq -c '.'

这里的-c参数就是「compact(紧凑)输出」的意思,刚好能输出你要的{"foo":"lorem","bar":"ipsum"}格式。

顺便提下你提到的格式化输出对应操作,只要去掉-c就行:

echo '{"foo":"lorem","bar":"ipsum"}' | jq '.'

方法2:用Python(无需额外安装,系统自带)

大多数系统都自带Python,所以这个方法不用额外装工具,很方便:

Python 3.9+ 版本

可以直接用--compact参数:

echo '{ "foo": "lorem", "bar": "ipsum" }' | python -m json.tool --compact

兼容所有Python版本的写法

如果你的Python版本比较旧,用这个更稳妥:

echo '{ "foo": "lorem", "bar": "ipsum" }' | python -c "import json, sys; print(json.dumps(json.load(sys.stdin), separators=(',',':')))"

通过separators=(',',':')直接指定分隔符去掉空格,完美生成紧凑JSON。

反向格式化同样用python -m json.tool就行:

echo '{"foo":"lorem","bar":"ipsum"}' | python -m json.tool

方法3:用Node.js(如果你的环境装了Node)

如果平时用Node开发,这个方法也很顺手:

echo '{ "foo": "lorem", "bar": "ipsum" }' | node -pe "JSON.stringify(JSON.parse(require('fs').readFileSync(0)))"

-pe参数是「print evaluate」的缩写,直接执行后面的JS代码,读取标准输入的JSON解析后再紧凑序列化。

实战:传给httpie的例子

比如要把压缩后的JSON作为请求体传给httpie,直接管道或者用进程替换就行:

# 管道方式
echo '{ "foo": "lorem", "bar": "ipsum" }' | jq -c '.' | http POST https://example.com/api

# 进程替换方式(更直观)
http POST https://example.com/api <(echo '{ "foo": "lorem", "bar": "ipsum" }' | jq -c '.')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:08:10