从dict中检索对象,使其易于通过json.dumps()转储



我怎样才能让它以一种类似python的方式打印出来(我可以手工制作它,但感觉有一种更好的python方式),我最初认为我可以使用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'}

json.dumps()方法有一个default关键字,允许您指定将未知项转换为JSON的方法。使用that:

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"}'

添加到class Car:

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

你也可以这样做:

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

但是它会打印所有的属性。

EDIT2:

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

最新更新