关于python:python-中-json-序列化汇总

39次阅读

共计 1025 个字符,预计需要花费 3 分钟才能阅读完成。

在 Python 中,能够应用 json 模块中的 dumps 函数将一个字典转换为 JSON 字符串。

示例代码

import json
data = {
    "name": "John Smith",
    "age": 30,
    "city": "New York"
}
json_data = json.dumps(data)
print(json_data)

输入后果

{"name": "John Smith", "age": 30, "city": "New York"} 

在 Python 中,字典的键必须是字符串类型,如果应用了其余类型的键,dumps 函数会抛出 TypeError 异样。

如果在调用 json.dumps 函数时提醒“TypeError: Object of type xxx is not JSON serializable”,示意传入的对象中蕴含了不能被序列化为 JSON 类型的对象。这通常产生在传入的对象中蕴含了 Python 内置类型之外的自定义对象,比方函数、模块等。

如代码

import json

def greet(name):
    return "Hello," + name

data = {
    "name": "John Smith",
    "greet": greet
}

json_data = json.dumps(data)

在下面的代码中,data 字典中的 greet 键对应的值是一个函数,不能被序列化为 JSON 类型。所以会抛出“TypeError: Object of type function is not JSON serializable”的异样。

解决办法是,将不能被序列化的对象替换为能被序列化的对象,或者间接从字典中删除这些键。如果想找到哪个键不能被序列化,能够应用上面的办法:

能够应用 Python 内置的 isinstance 函数来判断字典中的每个值是否是能够被序列化的类型。例如:

def is_serializable(obj):
    serializable_types = (int, float, str, bool, list, tuple, dict)
    return isinstance(obj, serializable_types)

data = {
    "name": "John Smith",
    "age": 30,
    "city": "New York",
    "greet": greet
}

for key, value in data.items():
    if not is_serializable(value):
        print(f"{key} is not serializable")

以上的办法能够找到哪个键不能被序列化。

正文完
 0