python自定义 JSON 序列化
导读:默认情况下,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自定义 JSON 序列化
本文地址: https://pptw.com/jishu/7892.html