python - simplejson.dumps(dict) 抛出 "not JSON serializable"

标签 python json dictionary serializable simplejson

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

simplejson.dumps(dict)

它抛出“MyObject 不是 JSON 可序列化”。

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

最佳答案

正确答案

为了使您的 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 方法相同。

关于python - simplejson.dumps(dict) 抛出 "not JSON serializable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8959027/

相关文章:

java - 从 Java 中的 JSONObject 中提取字符串键值对?

swift - 我如何在 swift 中以字典作为参数发出 http get 请求

python - Pandas:如何根据特定的后缀值对行进行排序?

python - 如何修复 pytorch 中的 'Input and hidden tensors are not at the same device'

python - 培训不起作用。 "Skipping training since max_steps has already saved"

python - 在Python中检查变量的类型是否为特定类型

javascript - 通过 post 传递 json 对象以及其他数据

java - JAVA中的JSON数组错误,并在URL中添加了反斜杠

Pythonic/itertools 的方式来通过一个 dict?

python : group by multiple dictionary keys