前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python自定义 JSON 序列化

python自定义 JSON 序列化

原创
作者头像
玖叁叁
发布2023-04-18 11:04:31
8970
发布2023-04-18 11:04:31
举报
文章被收录于专栏:玖叁叁

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

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

代码语言:javascript
复制
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 类的实例。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档