首页后端开发Pythonpython自定义 JSON 序列化

python自定义 JSON 序列化

时间2023-04-25 03:03:01发布访客分类Python浏览426
导读:默认情况下,JSON 模块可以序列化 Python 的基本数据类型,如字典、列表、字符串、数字、布尔值和 None。但是,对于自定义的 Python 类,需要提供一个自定义的序列化方法来将其序列化为 JSON 格式的字符串。以下是一个自定义...

默认情况下,JSON 模块可以序列化 Python 的基本数据类型,如字典、列表、字符串、数字、布尔值和 None。但是,对于自定义的 Python 类,需要提供一个自定义的序列化方法来将其序列化为 JSON 格式的字符串。

以下是一个自定义 Python 类的示例,我们将为其添加一个自定义的 JSON 序列化方法:

import json

# 自定义类
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 自定义 toJSON() 方法,用于将 Person 类转换为 JSON 格式的对象
    def toJSON(self):
        return {

            'name': self.name,
            'age': self.age
        }


# 自定义编码器
class PersonEncoder(json.JSONEncoder):
    def default(self, obj):
        # 如果 obj 是 Person 类的实例,则将其转换为 JSON 格式的对象
        if isinstance(obj, Person):
            return obj.toJSON()
        # 否则,调用父类的 default() 方法处理该对象
        return json.JSONEncoder.default(self, obj)

# 使用自定义编码器将 Python 对象转换为 JSON 格式的字符串
person = Person('Alice', 30)
json_string = json.dumps(person, cls=PersonEncoder)
print(json_string)

# 将 JSON 格式的字符串转换为 Python 对象
json_string = '{
"name": "Bob", "age": 25}
    '
person = json.loads(json_string, object_hook=lambda x: Person(x['name'], x['age']))
print(person.name, person.age)

在此示例中,我们定义了一个自定义类 Person 和一个自定义的 toJSON() 方法,该方法将 Person 类转换为 JSON 格式的对象。然后,我们定义了一个自定义编码器 PersonEncoder,该编码器检查 Python 对象是否是 Person 类的实例,如果是,则将其转换为 JSON 格式的对象。最后,我们将 Python 对象转换为 JSON 格式的字符串,然后将 JSON 格式的字符串转换为 Python 对象,并使用自定义的对象钩子 lambda 函数将其转换为 Person 类的实例。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

python

若转载请注明出处: python自定义 JSON 序列化
本文地址: https://pptw.com/jishu/7892.html
Python序列化-pickle Python序列化-序列化和反序列化

游客 回复需填写必要信息