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

如何将任意Python对象序列化为可读JSON并还原为原对象?

如何构建包含任意Python对象完整信息的可读JSON并重构原始对象?

需求

  • 预先未知对象类型,需通过JSON结构自动识别
  • 支持字典、列表等复杂嵌套数据结构
  • 生成的JSON需具备良好可读性

已尝试的方案

  • 标准JSON的dumps/loads无法重构自定义对象
  • Pickle可实现序列化反序列化,但输出不是可读JSON格式
  • 为JSON库编写钩子不可行,因为存在大量唯一类/对象,无法逐一适配
  • 结合Pickle与JSON编码解码无法得到纯JSON格式的存储结果
  • 尝试使用namedtuple,未达到预期功能

示例代码

class Phone:
    def __init__(self, number, type):
        self.phone_number = number
        self.number_type = type


class Person:
    def __init__(self, first_name, last_name, phone_numbers):
        self.first_name = first_name
        self.last_name = last_name
        self.phone_numbers = phone_numbers


number_1 = Phone(9999999999, "Home")
number_2 = Phone(8888888888, "Work")
number_3 = Phone(7777777777, "Office")

person_1 = Person("Tom", "Timothy", [number_1, number_2, number_3])
person_2 = Person("Tim", "Jones", [])
person_list = [person_1, person_2]

# 目标:将person_list转换为JSON文档,再从JSON重构出保留原结构的Python对象

目标JSON示例

{
  "<class 'list'>": [
    {
      "<class '__main__.Person'>": {
        "first_name": "Tom",
        "last_name": "Timothy",
        "<class 'list'>": [
          {
            "<class '__main__.Phone'>": {
              "phone_number": 9999999999,
              "number_type": "home"
            }
          },
          {
            "<class '__main__.Phone'>": {
              "phone_number": 8888888888,
              "number_type": "work"
            }
          },
          {
            "<class '__main__.Phone'>": {
              "phone_number": 7777777777,
              "number_type": "office"
            }
          }
        ]
      }
    },
    {
      "<class '__main__.Person'>": {
        "first_name": "Tim",
        "last_name": "Jones",
        "<class 'list'>": []
      }
    }
  ]
}

问题

是否有人遇到过此类问题?或者有可实现该功能的Python库推荐?

内容的提问来源于stack exchange,提问作者Jubin Mathew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:30:47