Python将类序列化为JSON

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提供

pip install pymodjson

这里提供代码和示例:(mit)https://github.com/saravanareddy/pymodjson


通过仔细过滤对象的__dict__,可以创建json

工作代码:

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)