如何将任意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
相关产品推荐
相关产品推荐

