我正在使用MongoDB 3.4和Python 2.7。我从数据库中检索了一个文档,我可以打印它,结构表明它是一个Python字典。我想将此文档的内容写为JSON文件。当我创建一个像d = {"one": 1, "two": 2}
这样的简单字典时,我可以使用json.dump(d, open("text.txt", 'w'))
将其写入文件
但是,如果我将上面代码中的d替换为我从MongoDB检索的文档,我会收到错误
ObjectId不是JSON可序列化的
建议?
答案 0 :(得分:5)
如您所知,问题是_id
的值在ObjectId。
要序列化的默认json编码器不理解ObjectId
的类定义。对于任何默认JSONEncoder无法理解的Python对象,您应该收到类似的错误。
另一种方法是编写自己的自定义编码器以序列化ObjectId
。但是,您应该避免发明轮子并使用提供的PyMongo/bson实用程序方法bson.json_util
例如:
from bson import json_util
import json
json.dump(json_util.dumps(d), open("text.json", "w"))
答案 1 :(得分:1)
问题是“_id”实际上是一个对象而不是本地反序列化。通过用mydocument['_id'] ='123
中的字符串替换_id来解决问题。