我对python2(2.7)中的json模块没有多少经验。现在我遇到了一个问题:如何将自定义对象序列化为json,然后将其反序列化。
我将此对象层次结构作为示例:
class Company(object):
def __init__(self, company_id):
self.company_id = company_id
self.name = ''
# other 10 attributes with simple type
...
self.departments = [] #list of Dept objects
class Dept(object):
def __init__(self, dept_id):
self.dept_id = dept_id
self.name = ''
# other 10 attributes with simple type
...
self.persons = [] #list of Person objs
class Person(object):
def __init__(self, per_id):
self.per_id = per_id
self.name = ''
# other 10 attributes with simple type
...
self.skills = [] #list of Skill objs
class Skill(object):
def __init__(self, skill_id):
self.skill_id = skill_id
self.name = ''
# other 10 attributes with simple type
...
self.foos = [] #list of Foo objs
class Foo(object):
.....
现在说我从Company
获得了一个对象,其中填充了嵌套对象的所有属性和列表。我想将对象保存到json文件中。然后将其加载回来,以便加载那些嵌套对象(departments, persons, skills
)。
我读过pydoc,知道json de / encoding是基于dict的。我现在可以用这个进行序列化:
json.dump(company_obj, jsonfile, default = lambda o: o.__dict__, sort_keys=True, indent=4)
但很难在以后将其恢复到Company
。
我认为这个问题很常见。我在这里搜索了SO和谷歌,没有找到有用的信息。
在这种情况下,执行json序列化和反序列化的正确方法是什么。
答案 0 :(得分:0)
您需要的是自定义编码器和解码器。这些记录在此处:http://docs.python.org/2/library/json.html#encoders-and-decoders
一种有效的解决方案是在编码时将限定类名添加到dict中,并在解码时使用它来创建正确类的实例。