You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:12:37