我正在尝试创建类实例的JSON字符串表示形式并且遇到困难。假设该类的构建如下:
class testclass: value1 = "a" value2 = "b"
像这样对json.dumps进行调用:
t = testclass() json.dumps(t)
失败了,并告诉我testclass不可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.'
我究竟做错了什么?
基本问题是,JSON编码器json.dumps()仅知道默认情况下如何序列化一组有限的对象类型(所有内置类型)。在此处列出:https : //docs.python.org/3.3/library/json.html#encoders-and- decoders
json.dumps()
一种好的解决方案是使您的类继承自该类JSONEncoder,然后实现该JSONEncoder.default()函数,并使该函数为您的类发出正确的JSON。
JSONEncoder
JSONEncoder.default()
一个简单的解决方案是调用该实例json.dumps()的.__dict__成员。那是一个标准的Python dict,如果您的类很简单,它将是JSON可序列化的。
.__dict__
dict
class Foo(object): def __init__(self): self.x = 1 self.y = 2 foo = Foo() s = json.dumps(foo) # raises TypeError with "is not JSON serializable" s = json.dumps(foo.__dict__) # s set to: {"x":1, "y":2}
在此博客文章中讨论了上述方法:
使用__dict__将任意Python对象序列化为JSON