1

我怎样才能让它以类似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'}
4

2 回答 2

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"}'
于 2013-04-12T15:07:46.200 回答
-1

将此添加到汽车类:

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

编辑:

你也可以这样做:

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

但它会打印所有属性。

编辑2:

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

于 2013-04-12T15:05:30.490 回答