如何使用jsonpickle递归序列化多层嵌套的对象列表?
解决jsonpickle递归序列化嵌套对象列表的问题
问题根源在于你定义的region_list和image_manipulation_element_list是类属性,而jsonpickle默认只序列化对象的实例属性,因此嵌套的子对象列表没被包含进去。只要调整类的属性定义,就能实现递归序列化所有内容。
修复步骤及代码示例
1. 将类属性改为实例属性
在每个类的__init__方法中初始化列表,确保它们属于实例而非类本身:
import jsonpickle class ImageManipulationElement: def __init__(self): # 示例属性,根据你的实际需求添加 self.element_id = 0 self.operation_type = "" class ImageManipulationRegion: def __init__(self): # 改为实例属性 self.image_manipulation_element_list = [] class ImageManipulationConfiguration: def __init__(self): # 改为实例属性 self.region_list = [] def to_json(self): return jsonpickle.encode(self.region_list, indent=4, separators=(',', ': '))
2. 测试序列化效果
创建嵌套对象并调用序列化方法,此时所有层级的对象都会被递归序列化:
# 构建测试数据 config = ImageManipulationConfiguration() # 创建区域并添加元素 region = ImageManipulationRegion() elem1 = ImageManipulationElement() elem1.element_id = 1 elem1.operation_type = "crop" elem2 = ImageManipulationElement() elem2.element_id = 2 elem2.operation_type = "resize" region.image_manipulation_element_list = [elem1, elem2] config.region_list.append(region) # 生成JSON json_result = config.to_json() print(json_result)
关键说明
jsonpickle的递归序列化依赖对象的实例属性。如果坚持使用类属性,需要手动指定序列化时包含类属性,但这种方式不符合Python面向对象的常规实践,容易引发其他问题,因此优先推荐使用实例属性的方案。
内容的提问来源于stack exchange,提问作者ESD
相关产品推荐
相关产品推荐

