Python执行json.dumps转换MongoDB返回的字典数组为JSON失败如何解决
故障原因
你执行json.dumps(res)报错是因为Python标准json模块不支持序列化MongoDB返回的ObjectId类型数据,你查询结果里的_id字段为ObjectId实例,不属于JSON原生支持的序列化类型。
可用解决方案
- 方案1:手动转换
_id字段类型
在遍历查询结果时直接将ObjectId转为字符串,修改你原有代码中遍历游标部分即可:
res = [] for doc in cursor: # 将_id转为字符串 doc['_id'] = str(doc['_id']) res.append(doc) response = json.dumps(res)
- 方案2:自定义序列化规则
编写自定义序列化函数处理ObjectId类型,兼容其他可能存在的特殊类型:
import json from bson import ObjectId def custom_json_serializer(obj): if isinstance(obj, ObjectId): return str(obj) raise TypeError(f"Type {type(obj)} not serializable") # 调用dumps时指定自定义序列化函数 response = json.dumps(res, default=custom_json_serializer)
- 方案3:使用pymongo内置序列化工具
直接使用pymongo提供的json_util工具,可自动适配所有MongoDB特殊类型,无需额外自定义规则:
from bson import json_util response = json_util.dumps(res)
内容的提问来源于stack exchange,提问作者JulienTrs
相关产品推荐
相关产品推荐

