json.dumps()可将Python字典转为JSON字符串,需用default参数处理datetime等不可序列化类型,ensure_ascii=False显示中文,indent和sort_keys提升可读性,写入文件优先用json.dump()。

在 Python 中,json.dumps() 是将 Python 字典(或其他支持的类型)序列化为标准 JSON 字符串的核心方法。对“复杂字典”(含嵌套、中文、日期、自定义对象等),需注意编码、可序列化性与格式控制。
确保字典内容可被 JSON 序列化
JSON 标准只支持 dict、list、str、int、float、bool、None 这几种类型。若字典中包含以下内容,会直接报 TypeError:
- datetime 对象(如
datetime.now()) - 自定义类实例(如
User(name='Alice')) - bytes 类型
- set 或其他不可序列化类型
解决方式:使用 default 参数提供转换逻辑。例如:
>>> import json
>>> from datetime import datetime
>>> data = {"name": "张三", "created": datetime.now(), "tags": {"python", "web"}}
>>> json.dumps(data, default=str, ensure_ascii=False, indent=2)
'{
"name": "张三",
"created": "2024-05-10 14:22:36.123456",
"tags": ["python", "web"]
}'
立即学习“Python免费学习笔记(深入)”;
处理中文与编码问题
默认情况下,json.dumps() 会将非 ASCII 字符(如中文)转义为 uXXXX 形式,导致字符串可读性差:
>>> json.dumps({"城市": "北京"})
'{"\u57ce\u5e02": "\u5317\u4eac"}'
添加 ensure_ascii=False 即可输出原生中文字符:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
>>> json.dumps({"城市": "北京"}, ensure_ascii=False)
'{"城市": "北京"}'
提升可读性与调试体验
生成用于日志、API 响应或人工查看的 JSON 字符串时,建议启用格式化选项:
-
indent=2:添加缩进(2 个空格),使结构清晰 -
sort_keys=True:按键字母序排序,便于比对和版本控制 -
separators=(',', ': '):可选,控制键值间空格(默认已带空格)
示例:
>>> json.dumps({"b": 2, "a": 1}, indent=2, sort_keys=True, ensure_ascii=False)
'{
"a": 1,
"b": 2
}'
安全写入文件或传输前的注意事项
若需保存到文件,推荐直接用 json.dump()(注意是不带 s 的函数),它内部调用 dumps 并写入文件对象,自动处理编码:
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
若必须用 dumps 得到字符串再写入,请显式指定 encoding="utf-8"(尤其 Windows 系统下);否则可能因系统默认编码(如 cp936)导致写入失败或乱码。

















