最省事的json格式化方式是用python -m json.tool配合stdin管道,如echo '{"name":"alice"}' | python -m json.tool;它仅支持utf-8、不支持自定义缩进或key排序,错误提示无行号,建议用jq调试。

用 python -m json.tool 格式化管道输入的 JSON 字符串
直接把一长串压缩 JSON 丢进命令行格式化,最省事的方式就是走 stdin 管道。只要 JSON 合法,python -m json.tool 就能原样解析并美化输出:
- Linux/macOS 下:
echo '{"name":"Alice","scores":[95,87]}' | python -m json.tool - Windows PowerShell:
echo '{"name":"Alice","scores":[95,87]}' | python -m json.tool - Windows cmd 需转义双引号:
echo {"name":"Alice","scores":[95,87]} | python -m json.tool(不推荐,易出错)
注意:输入必须是完整、合法的 JSON 文本,不能带 JS 风格的单引号或尾逗号,否则会报 Expecting property name enclosed in double quotes 或 Expecting ',' delimiter。
从文件读取并格式化后保存为新文件
python -m json.tool 默认只输出到 stdout,不覆盖原文件。想“就地格式化”得靠重定向:
- 安全做法(生成新文件):
python -m json.tool input.json > output.json - 危险操作(覆盖原文件):
python -m json.tool input.json > input.json—— 这会导致清空原文件,因为 shell 先截断再执行命令 - 若需校验后再写入,建议加
-显式表示 stdin:cat input.json | python -m json.tool > output.json,便于排查中间环节
该模块不支持缩进自定义(固定为 2 空格),也不支持排序 key;如需 sort_keys=True 或 indent=4,得切到 Python 脚本里调用 json.dumps()。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
处理带 BOM 或非 UTF-8 编码的 JSON 文件
python -m json.tool 默认按 UTF-8 解码,遇到 Windows 记事本保存的 UTF-8-BOM 或 GBK 编码文件会直接报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0。
- 先用
file input.json(Linux/macOS)或chcp+more input.json(Windows)确认编码 - 转换编码再处理:
iconv -f gbk -t utf-8 input.json | python -m json.tool - 或者绕过命令行,用 Python 脚本显式指定 encoding:
json.load(open('input.json', 'r', encoding='gbk'))
BOM 头(\ufeff)常被忽略,但会导致 json.tool 解析失败,删掉最开头的三个字节即可,或用 sed '1s/^\xef\xbb\xbf//' input.json(Linux/macOS)。
为什么 json.tool 有时报错却不说哪一行?
它底层调用的是 json.load(),错误位置只提示字符偏移(char 42),不显示行号。调试时别盯着错误信息猜,直接用 jq 替代(jq '.' input.json)——jq 报错带精确行列,且对 trailing comma、单引号更宽容。
- 常见陷阱:JSON 字符串里混了注释
//或/* */,json.tool不支持,必须先人工删掉 - 多行字符串未转义换行符(如
"msg": "line1\nline2")是合法的,但若原始文本里真有未转义的裸换行,就不是有效 JSON - 用
python -m json.tool --help只会显示简短用法,没有详细参数说明,它的功能非常有限,本质只是个轻量验证+美化入口
真正需要频繁处理 JSON 的场景,别卡在命令行工具上;写个两行 Python 脚本,可控性高得多。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










