1. 从一行“天书”到清晰可读:为什么你的JSON文件总挤在一起?
不知道你有没有遇到过这种情况:辛辛苦苦用Python处理完数据,用json.dump()保存成一个.json文件,满心欢喜地双击打开,准备检查一下成果。结果呢?编辑器里密密麻麻,所有的数据、所有的括号、所有的键值对,全都挤在长长的一行里,一眼望不到头。想找个特定的字段?得用鼠标横向拖半天,眼睛都看花了。这种体验,我刚开始用Python处理JSON时,几乎每次都会遇到,真是让人头大。
这其实就是Python标准库json模块的“默认行为”。json.dump()这个方法,它的首要设计目标是生成标准、有效的JSON字符串,以便于机器之间的高效传输和解析。对于机器来说,有没有空格、换不换行,根本无所谓,只要语法正确就行。所以,为了最节省空间(减少不必要的空白字符),它默认就输出成紧凑的单行格式。这就像我们打包行李,为了节省箱子空间,把所有衣服都紧紧卷起来塞进去,虽然很高效,但想找某件特定衣服时就麻烦了。
那么,我们人类想看、想调试、想手动修改的时候怎么办呢?这就需要我们主动告诉Python:“嘿,别那么省,加点空格和换行,让我能看清楚点。” 这个“告诉”的方式,就是使用json.dumps()或json.dump()的**indent参数**。这个参数可以说是JSON格式化的“灵魂开关”。不指定它,就是给机器看的压缩包;指定了它,就是给人看的排版文档。
我刚开始学的时候也纳闷,这么常用的需求,为啥不是默认打开呢?后来想明白了,这其实是一种很好的设计哲学:默认追求效率和兼容性,将可读性这种“美化”工作作为可选项交给开发者。毕竟,在API接口、配置文件序列化等很多场景下,我们确实不需要那些额外的空白字符。但一旦我们需要——比如生成给前端同事看的Mock数据、保存一份本地配置文件、或者仅仅是调试时想看清数据结构——indent参数就派上大用场了。
2. 核心武器:详解json.dump()的indent与ensure_ascii
要让JSON漂亮地多行显示,我们主要跟json.dump()或json.dumps()的两个参数打交道:indent和ensure_ascii。这两个参数经常结伴出现,但它们负责的事情完全不同,咱们得掰开揉碎了讲清楚。
2.1 indent参数:你的格式化遥控器
indent参数接受一个整数或者一个字符串。它的作用简单粗暴:控制缩进。
-
indent=None(默认值):这就是“压缩模式”。所有内容输出到一行,没有额外的空格或换行。这是最省空间的格式。import json data = {"name": "张三", "age": 30, "city": "北京"} json_str = json.dumps(data) print(json_str) # 输出:{"name": "\u5f20\u4e09", "age": 30, "city": "\u5317\u4eac"}看,不仅挤在一行,中文还变成了Unicode转义序列(
\u5f20\u4e09),这是ensure_ascii的默认行为,我们稍后说。 -
indent=4(最常用):传入一个正整数,比如4,表示用多少个空格

266

被折叠的 条评论
为什么被折叠?



