默认情况下,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 类的实例。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。