场景描述
在使用MongoDB数据库插入数据之后,再使用Flask-RESTful接口返回数据的时候报错:
TypeError: Object of type ObjectId is not JSON serializable
原因分析
造成该问题的原因是数据在写入MongoDB的时候,即使你没有指定_id
字段,也会为每一条数据自动生成一个_id
字段,例如:
{"_id" : ObjectId("6180af3ef261f0827ea248d6"),"省份名称" : "澳门","省份链接" : "https://www.gongkaoleida.com/area/3509","省份代号" : "3509"
}
该字段为ObjectId
类型,不能使用Json序列化返回,所以会报错。
至于为什么会加入一个_id
字段,可以参看官方文档:为什么 PyMongo 会在我的所有文档中添加一个 _id 字段?
解决办法
既然_id
字段不能被转换,也对我们实际数据没什么作用,那么在插入数据之后将其弹出即可,示例如下:
self.db.filter_result.insert_one(item)
item.pop('_id')