使用Python从MongoDB文档创建JSON文件

时间:2017-01-04 14:10:29

标签: json mongodb python-2.7

我正在使用MongoDB 3.4和Python 2.7。我从数据库中检索了一个文档,我可以打印它,结构表明它是一个Python字典。我想将此文档的内容写为JSON文件。当我创建一个像d = {"one": 1, "two": 2}这样的简单字典时,我可以使用json.dump(d, open("text.txt", 'w'))将其写入文件 但是,如果我将上面代码中的d替换为我从MongoDB检索的文档,我会收到错误

  

ObjectId不是JSON可序列化的

建议?

2 个答案:

答案 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来解决问题。