Python将类序列化为JSON

时间:2016-09-13 04:57:46

标签: python json

我有一个要求,我想构建很多JSON对象。并且有许多不同的定义,理想情况下我想像类和构造对象一样管理它们并根据需要将它们转储到JSON。

是否有现有的包/配方让我做以下

为了保持简单,我可以说我需要代表正在工作,学习或两者兼而有之的人:

[{
  "Name": "Foo",
  "JobInfo": {
    "JobTitle": "Sr Manager",
    "Salary": 4455
 },
 {
  "Name": "Bar",
  "CourseInfo": {
    "CourseTitle": "Intro 101",
    "Units": 3
}]

我想创建可以转储有效JSON的对象,但是像普通的python类一样创建。

我想像db模型一样定义我的类:

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

获得

pip install pymodjson

此处提供代码和示例:(MIT) https://github.com/saravanareddy/pymodjson

1 个答案:

答案 0 :(得分:2)

您可以通过从对象的json小心过滤来创建__dict__

工作代码:

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)