json.dump()
是 Python 中 json
模块用于将 Python 数据结构序列化为 JSON 格式并写入文件的方法。它提供了多个参数,用于控制序列化的行为和输出格式。以下是 json.dump()
的参数及其说明:
json.dump()
的语法json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
obj
fp
.write()
方法的文件对象,通常是通过 open()
函数以文本模式('w'
或 'a'
)打开的文件。skipkeys
False
。True
,则在序列化字典时,会跳过那些键不是基本类型(如字符串、数字、元组等)的键值对。False
,则会抛出 TypeError
异常,提示键不可序列化。ensure_ascii
True
。True
,则输出的 JSON 字符串中所有非 ASCII 字符都会被转义为 Unicode 转义序列(如 \uXXXX
)。False
,则会直接输出非 ASCII 字符(如中文、日文等),这在处理国际化数据时非常有用。check_circular
True
。True
,则在序列化过程中会检查对象是否包含循环引用(即对象引用自身)。如果发现循环引用,会抛出 ValueError
异常。False
,则不会进行循环引用检查,但可能会导致程序崩溃或无限递归。allow_nan
True
。True
,则允许序列化 float('nan')
、float('inf')
和 float('-inf')
等特殊浮点值。False
,则会抛出 ValueError
异常,提示这些值不可序列化。cls
None
。json.JSONEncoder
并重写其方法。json.JSONEncoder
。indent
None
。indent=4
表示每级缩进 4 个空格)。indent="\t"
表示每级缩进一个制表符)。None
,则输出的 JSON 字符串不会进行格式化,而是紧凑的单行输出。separators
None
。(', ', ': ')
,即键值对之间用逗号和空格分隔,键和值之间用冒号和空格分隔。(',', ':')
,去掉多余的空格。default
None
。json.dump()
遇到无法序列化的对象时,会调用这个函数,并将对象作为参数传入。该函数需要返回一个可序列化的值。sort_keys
False
。True
,则在序列化字典时,会按照键的字典序对键值对进行排序。False
,则不会对键值对进行排序,保持原始顺序。import json
data = {
"name": "Alice",
"age": 25,
"city": "New York",
"hobbies": ["reading", "traveling", "coding"]
}
# 将数据写入 JSON 文件
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=4)
生成的 data.json
文件内容:
{
"name": "Alice",
"age": 25,
"city": "New York",
"hobbies": [
"reading",
"traveling",
"coding"
]
}
indent
和 separators
import json
data = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 紧凑格式输出
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, separators=(',', ':'))
# 格式化输出
with open("data_pretty.json", "w", encoding="utf-8") as file:
json.dump(data, file, indent=4)
生成的 data.json
文件内容(紧凑格式):
{"name":"Alice","age":25,"city":"New York"}
生成的 data_pretty.json
文件内容(格式化输出):
{
"name": "Alice",
"age": 25,
"city": "New York"
}
default
参数假设有一个包含日期对象的字典:
import json
from datetime import datetime
data = {
"name": "Alice",
"birthday": datetime(1995, 5, 15)
}
# 自定义序列化函数
def serialize_datetime(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError(f"Type {type(obj)} is not serializable")
# 将数据写入 JSON 文件
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, default=serialize_datetime, indent=4)
生成的 data.json
文件内容:
{
"name": "Alice",
"birthday": "1995-05-15T00:00:00"
}
json.dump()
是一个功能强大的方法,用于将 Python 数据结构序列化为 JSON 格式并写入文件。ensure_ascii
、indent
、separators
和 default
等。