TypeError("'ObjectId' object is not iterable") 解决方法

‘ObjectId’ object is not iterable 使用fastapi,当返回结果里面包含mongodb的id,也就是ObjectId类型的时候,就会报错: TypeError("‘ObjectId’ object is not iterable")。 直接google搜索下,可以得到几种方法: 先使用str()方法将ObjectId转换成字符串 使用bson内置的json_util.dumps()方法将ObjectId转换成字符串 删除ObjectId字段 定义一个JSONEncoder类,将ObjectId转换成字符串 1 2 3 4 5 6 7 8 9 10 import json from bson import ObjectId class JSONEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, ObjectId): return str(o) return json.JSONEncoder.default(self, o) JSONEncoder().encode(analytics) json.dumps(my_obj, default=str) 如果是老版本的fastapi 1 2 3 import pydantic from bson import ObjectId pydantic.json.ENCODERS_BY_TYPE[ObjectId]=str 看起来,第6种方法是比较优雅的,但是,对于没有使用pydantic的返回结果,就不适用了。而且,新版本的pydantic也不是这样的使用方法了。 其实,不管什么类型,只要是json不支持的,都会报错,比如datetime类型也会报错。 但是为什么fastapi返回datetime类型的时候不会报错呢?因为fastapi内部已经做了处理,将datetime类型转换成了字符串类型。 通过报错信息。 1 2 3 4 5 6 7 8 9 │ /xxxx/site-packages/fastapi/encoders....

六月 5, 2024 · 2 分钟 · jyd