2016-09-13 15 views
1

多くのJSONオブジェクトを構築したいという要件があります。また、さまざまな定義があり、理想的には、それらをクラスのように管理し、オブジェクトを構築し、必要に応じてJSONにダンプしたいと考えています。Pythonクラスから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 

EDIT

私はこのを達成するために自分自身のミニフレームワークを書きました。

pip install pymodjson

ピップを経由して、使用可能なコードおよび実施例は、ここに用意されています(MIT) https://github.com/saravanareddy/pymodjson

+2

[ここを参照してください](http://stackoverflow.com/questions/3768895/how-to-make-a-class-json-serializable)。検証部分については、独自の 'JSONEncoder'を記述する必要があります。 – Sevanteri

答えて

2

あなたは慎重にオブジェクトの__dict__からフィルタリングすることにより、jsonを作成することができます。

作業コード:

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) 
関連する問題