Python中对象转JSON问题

这篇博客解决的问题主要是xxx is not JSON serializable,这个问题是由于Python中对象不能够直接转化为JSON对象导致的。按照在Java中的开发经验,这个对象只要声明了各个属性应该可以直接转化的,但是Python中的JSON并不认同这一套。错误如下图所示:

在网上着了很多解决方案,大多数是建议将其转化为list对象,但是这里还有另外一种解决方法,就是直接指定JSON序列化对象使用的Encoder类。下面以一个例子来说明这种方法。

Item.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import json


class Item:
def __init__(self, name, age):
self.name = name
self.age = age

class ItemEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, Item):
return {
"name": o.name,
"age": o.age
}
return json.JSONEncoder.default(self, o)

if __name__ == "__main__":
item = Item("Richard", 24)
json_str = json.dumps(item,cls=ItemEncoder)
print(json_str)

在这个文件中,声明了两个类,分别是Item和ItemEncoder,其中,ItemEncoder继承了JSONEncoder并重写了default方法。也就说,一旦检测到序列化对象是Item类的实例时,就会执行返回一个dict的逻辑,如上图所示。执行这段代码最终的结果是:

1
{"name": "Richard", "age": 24}
分享到