Python serialize class to JSON
本问题已经有最佳答案,请猛点这里访问。
我有一个需求,我想在这里构建很多JSON对象。而且有许多不同的定义,理想情况下,我希望像类一样管理它们,构造对象,并根据需要将它们转储到JSON。
有没有现有的包装/食谱让我来做以下工作
为了简单起见,假设我需要代表那些正在工作、学习或两者兼而有之的人:
1 2 3 4 5 6 7 8 9 10 11 12 | [{ "Name":"Foo", "JobInfo": { "JobTitle":"Sr Manager", "Salary": 4455 }, { "Name":"Bar", "CourseInfo": { "CourseTitle":"Intro 101", "Units": 3 }] |
我想创建可以转储有效JSON的对象,但创建时像常规的Python类一样。
我想像DB模型一样定义类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Person: Name = String() JobInfo = Job() CourseInfo = Course() class Job: JobTitle = String() Salary = Integer() class Course: CourseTitle = String() Units = Integer() persons = [Person("Foo", Job("Sr Manager", 4455)), Person("Bar", Course("Intro 101", 3))] person_list = list(persons) print person_list.to_json() # this should print the JSON example from above |
编辑
为此,我编写了自己的微型框架。通过PIP提供
这里提供代码和示例:(mit)https://github.com/saravanareddy/pymodjson
通过仔细过滤对象的
工作代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import json class Person(object): def __init__(self, name, job=None, course=None): self.Name = name self.JobInfo = job self.CourseInfo = course def to_dict(self): _dict = {} for k, v in self.__dict__.iteritems(): if v is not None: if k == 'Name': _dict[k] = v else: _dict[k] = v.__dict__ return _dict class Job(object): def __init__(self, title, salary): self.JobTitle = title self.Salary = salary class Course(object): def __init__(self, title, units): self.CourseTitle = title self.Units = units persons = [Person("Foo", Job("Sr Manager", 4455)), Person("Bar", Course("Intro 101", 3))] person_list = [person.to_dict() for person in persons] print json.dumps(person_list) |