Python python 序列化 ObjectId

lyyyyyyy · 2021年07月22日 · 最后由 lyyyyyyy 回复于 2021年07月23日 · 2259 次阅读

最近在学 mongoDB, 尝试把 mongoDB 的查询出来的数据保存到 json 文档,碰到了一点小问题,记录一下。
首先导入一个 ObjectId, from bson import ObjectId

import json
from bson import ObjectId

data = {
    "_id":ObjectId("577d211b1d41c8303f73cf7d")
}
print(json.dumps(data))
TypeError: Object of type ObjectId is not JSON serializable

这里可以看到因为 ObjectId 不在可序列化的范围内导致报错 JSON 文档

但是文档提供了解决办法! 试一下

import json
from json import JSONEncoder
from typing import Any
from bson import ObjectId

data = {
    "_id": ObjectId("577d211b1d41c8303f73cf7d")
}
class JsonEncoder(JSONEncoder):
    def default(self, o: Any) -> Any:
        if isinstance(o, ObjectId):
            return o.__str__()
        # Let the base class default method raise the TypeError
        return super().default(o)

print(json.dumps(data, cls=JsonEncoder))

output=> {"_id": "577d211b1d41c8303f73cf7d"}

共收到 3 条回复 时间 点赞

这个方案是没错,但是一般 mongo 的这个在 id 我们把他当 str 去做序列化也行的。

陈子昂 回复

主要还有 Date 这些,用这个方式可以一次性全部解决

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册