在python中使用我的类对象作为JSON

Use my class object as JSON in python

本问题已经有最佳答案,请猛点这里访问。

我有"player"类,它有几个int和string fild。如何将其编码为JSON对象?


default方法传递给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
import json


class Player(object):
    def __init__(self, name, number):
        self.name = name
        self.number = number


def encode_json(o):
    if isinstance(o, Player):
        return o.__dict__

        # or, alternatively ...
        return {
            'name': o.name,
            'number': o.number,
        }

    raise TypeError('Cannot serialize object of type %s' % type(o))

doc = {'team': [
    Player('Joe', 1),
]}
print(json.dumps(doc, default=encode_json))

在许多情况下,仅仅返回__dict__就足够了。如果你需要额外的信息(比如类名)或者不想编码所有的东西(也许一个玩家对象可以保存一个你不想给出的密码),只需定义你自己的结果,如# or, alternatively后面所示。


如果应该转换对象的所有成员(即没有用于优化的额外成员,如缓存值),则可以使用

1
json.dumps(obj.__dict__)

对于加载器来说,如果上下文没有暗示类名称,那么最好也添加一个包含类名称的成员…

1
2
3
d = obj.__dict__.copy()
d['classname'] = obj.__class__.__name__
return json.dumps(s)

但是,如果对象还包含对其他对象的引用,则必须首先决定在传递这些释放时使用的模式(例如,使用对象ID值将这些成员序列化到JSON)。如果您的数据结构只是一个树,而不是一个一般的引用图,那么使用递归序列化可能是可以接受的。