从dict中检索对象,可以通过json.dumps()轻松转储它

时间:2013-04-12 15:02:32

标签: python json python-2.7

我怎样才能以类似pythonic的方式将它打印出来(我可以手动制作但感觉有更好的pythonic方式),原本以为我可以使用dict但是我有限的python知识,我猜它们是一种更简单的方法。我的最终目标是通过json.dumps()

创建一个json对象

期望的结果:

{'cars': [{'make': 'VW', 'model': 'Jetta'},{'make': 'BMW', 'model': 'X5'}], 'name': 'John Smith'}

代码:

class Person(object):
    def __init__(self):
        self.name = None
        self.cars = []

class Car(object):
    def __init__(self, make, model):
        self.make = make
        self.model = model

>>> p = Person()
>>> p.name = 'John Smith'
>>> p.cars.append(Car('VW', 'Jetta'))
>>> p.cars.append(Car('BMW' ,'X5'))

>>> p.__dict__
{'cars': [<__main__.Car object at 0x7fe5566e9490>, <__main__.Car object at 0x7fe5566e94d0>], 'name': 'John Smith'}

2 个答案:

答案 0 :(得分:3)

json.dumps()方法有一个default关键字,可让您指定将未知项目转换为JSON的方法。利用它:

def default(obj):
    if isinstance(obj, (Car, Person)):  # so if this is one of *your* objects
        return obj.__dict__             # turn it into a python dict

    raise TypeError                     # Sorry, don't know how to handle this

然后用它来创建JSON:

json.dumps(p, default=default)

结果:

>>> json.dumps(p, default=default)
'{"cars": [{"make": "VW", "model": "Jetta"}, {"make": "BMW", "model": "X5"}], "name": "John Smith"}'

答案 1 :(得分:-1)

将其添加到Car类:

def __repr__(self):
    return "{'make': %s, 'model': %s}" % (self.make, self.model)

编辑:

你也可以这样做:

def __repr__(self):
    return str(self.__dict__)

但它会打印所有属性。

EDIT2:

我没有意识到你的目标是使用json.dumps()生成一个JSON文件。在这种情况下,你应该使用Martijn Pieters的方法。