simplejson.dumps(dict) 报错 "not JSON serializable

3 投票
1 回答
10268 浏览
提问于 2025-04-17 10:49

我有一个Python字典,里面的键是字符串,值是一些MyObject对象的列表。

如果我执行

simplejson.dumps(dict)

就会出现“我的对象无法被转换成JSON格式”的错误。

我该怎么做才能避免这个错误呢?还有,怎么才能让MyObject对象可以被转换成JSON格式呢?

1 个回答

8

正确的答案

为了让你的 MyObject 可以被序列化,你需要实现一个方法,这样你就可以在 dumps 中调用它。比如说:

class MyObject:
    #    ...
    #    MyObject has 3 properties: name (a string), number (an int), and parent (a MyObject)
    @staticmethod
    def serialize(obj):
        return {
            "name":   obj.name,
            "number": obj.number,
            "parent": obj.parent
        }

    #    ...

simplejson.dumps(myObjInstance, default=MyObject.serialize)

有趣的是,dumps 会像处理其他可以转换成 JSON 的对象一样,递归地调用这个序列化方法。也就是说,obj.parent 也会被序列化,而你不需要做额外的操作。

简化版

如果你只想把实例变量的名字和它们对应的值一一对应起来,你可以使用一些 Python 内置的魔法。每当你想要序列化一个更复杂的对象(同样,只是使用一一对应的变量和值),只需调用这一行:

simplejson.dumps(anyObj, default=lambda obj: obj.__dict__)

对于给定的 MyObject 实例,它的表现和前面提到的 serialize 方法是一样的。

撰写回答