欢迎访问宙启技术站
智能推送

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序列化。