我正在尝试创建一个类实例的 JSON 字符串表示并且遇到了困难。假设这个类是这样构建的:
class testclass:
value1 = "a"
value2 = "b"
对 json.dumps 的调用是这样的:
t = testclass()
json.dumps(t)
它失败并告诉我测试类不是 JSON 可序列化的。
TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable
我也尝试过使用 pickle 模块:
t = testclass()
print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL))
它提供类实例信息,但不提供类实例的序列化内容。
b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.'
我究竟做错了什么?
原文由 ferhan 发布,翻译遵循 CC BY-SA 4.0 许可协议
基本问题是 JSON 编码器
json.dumps()
只知道如何序列化一组有限的对象类型,所有内置类型。在此处列出: https ://docs.python.org/3.3/library/json.html#encoders-and-decoders一个好的解决方案是让您的类继承自
JSONEncoder
然后实现JSONEncoder.default()
函数,并使该函数为您的类发出正确的 JSON。一个简单的解决方案是在该实例的
.__dict__
成员上调用json.dumps()
。那是一个标准的 Pythondict
如果你的类很简单,它将是 JSON 可序列化的。此博客文章中讨论了上述方法:
使用 _ dict _ 将任意 Python 对象序列化为 JSON
当然,Python 提供了一个内置函数,可以为您访问
.__dict__
,称为vars()
。所以上面的例子也可以这样写: