Python中dumps()函数的参数详解
发布时间:2024-01-08 01:24:08
Python中的dumps()函数是json模块中的一个函数,用于将python对象转换为对应的JSON字符串。dumps()函数的完整格式为:
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
下面是对dumps()函数各个参数的详细解释以及使用例子:
1. obj:要转换为JSON格式的Python对象。可以是字典、列表、元组、字符串等等。
import json
# 将字典对象转换为JSON字符串
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_str = json.dumps(data)
print(json_str)
# 输出:{"name": "John", "age": 30, "city": "New York"}
# 将列表对象转换为JSON字符串
data = [1, 2, 3, 4, 5]
json_str = json.dumps(data)
print(json_str)
# 输出:[1, 2, 3, 4, 5]
2. skipkeys:一个布尔值,表示是否跳过非字符串的dict键。默认为False。
import json
# 跳过非字符串的dict键
data = {1: "one", 2: "two", "3": "three"}
json_str = json.dumps(data, skipkeys=True)
print(json_str)
# 输出:{"3": "three"}
3. ensure_ascii:一个布尔值,表示是否将所有非ASCII字符转换为ASCII字符转义序列。默认为True。
import json
# 确保所有非ASCII字符被转义
data = {"name": "中国"}
json_str = json.dumps(data, ensure_ascii=True)
print(json_str)
# 输出:{"name": "\u4e2d\u56fd"}
4. check_circular:一个布尔值,表示是否检查循环引用。默认为True。
import json
class Person:
def __init__(self, name):
self.name = name
p1 = Person("John")
p2 = Person("Alice")
p1.friend = p2
p2.friend = p1
# 检查循环引用
try:
json_str = json.dumps(p1)
print(json_str)
except Exception as e:
print("Error:", e)
# 输出:Error: Circular reference detected
5. allow_nan:一个布尔值,表示是否允许NaN、Infinity和-Infinity值。默认为True。
import json
import math
# 允许NaN、Infinity和-Infinity值
data = {
"nan": math.nan,
"inf": float("inf"),
"-inf": float("-inf")
}
json_str = json.dumps(data, allow_nan=True)
print(json_str)
# 输出:{"nan": NaN, "inf": Infinity, "-inf": -Infinity}
6. cls:一个用于定制JSON编码的Encoder子类,用于扩展默认的编码器。默认为None。
import json
class Person:
def __init__(self, name):
self.name = name
p = Person("John")
# 使用自定义编码器
class PersonEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, Person):
return {"name": o.name}
return super().default(o)
json_str = json.dumps(p, cls=PersonEncoder)
print(json_str)
# 输出:{"name": "John"}
7. indent:一个整数,表示序列化过程中缩进的空格数,用于美化输出的JSON字符串。默认为None,即不缩进。
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 缩进输出的JSON字符串
json_str = json.dumps(data, indent=4)
print(json_str)
# 输出:
# {
# "name": "John",
# "age": 30,
# "city": "New York"
# }
8. separators:一个元组,指定键值对之间和多个键值对之间的分隔符。默认为(", ", ": ")。
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 指定分隔符
json_str = json.dumps(data, separators=(".", "="))
print(json_str)
# 输出:{"name"="John"."age"=30"."city"="New York"}
9. default:一个用于编码不能直接转换为JSON的对象的函数,该函数会接收到无法序列化的对象,可以通过处理或转换该对象来返回可以序列化的结果。默认为None。
import json
# 处理不能直接转换为JSON的对象
data = {
"name": "John",
"age": 30,
"city": ("New York", "Los Angeles")
}
def handle_tuple(obj):
if isinstance(obj, tuple):
return list(obj)
return obj
json_str = json.dumps(data, default=handle_tuple)
print(json_str)
# 输出:{"name": "John", "age": 30, "city": ["New York", "Los Angeles"]}
10. sort_keys:一个布尔值,表示在输出JSON字符串时是否按照键对字典进行排序。默认为False。
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 按键排序输出JSON字符串
json_str = json.dumps(data, sort_keys=True)
print(json_str)
# 输出:{"age": 30, "city": "New York", "name": "John"}
以上就是dumps()函数的各个参数的详细解释以及使用例子。可以根据不同的需求选择合适的参数来对Python对象进行JSON序列化。
