dumps(dict)抛出“不可序列化的JSON”

2024-05-16 01:04:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python字典,其中键是字符串,值是MyObject对象的列表。 如果我执行

simplejson.dumps(dict)

它抛出“MyObject not JSON serializable”。

如何避免此异常,以及如何使MyObject可序列化?


Tags: 对象字符串json列表字典序列化notdict
1条回答
网友
1楼 · 发布于 2024-05-16 01:04:00

正确答案

为了使您的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也将被序列化,而无需您采取任何进一步的操作。

高尔夫版

如果只想将实例变量名1-1映射到它们各自的值,可以使用一些内置的Python魔术。每当您想序列化一个更复杂的对象(同样,只使用1-1变量值映射),只要调用这一行:

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

对于给定的MyObject实例,它的行为与前面提到的serialize方法相同。

相关问题 更多 >