2017-01-04 15 views
2

我使用MongoDB的3.4和Python 2.7 MongoDB的文檔創建JSON文件。我從數據庫中檢索了一個文檔,並且可以打印它,結構表明它是一個Python字典。我想把這個文檔的內容寫成JSON文件。當我創建了一個簡單的字典一樣d = {"one": 1, "two": 2}然後我就可以把它寫入使用json.dump(d, open("text.txt", 'w')) 但是一個文件,如果我在與文檔上面的代碼,我從MongoDB中檢索替換d我得到的錯誤從使用Python

的ObjectId不JSON序列化

建議?

回答

1

正如你已經發現了,問題是,_id值在ObjectId

ObjectId類定義不是由默認JSON編碼器理解爲被序列化。對於默認的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")) 
+0

感謝。工作很好。 –

1

的問題是,「_id」實際上是一個對象,而不是本地反序列化。通過用mydocument['_id'] ='123中的字符串替換_id解決了該問題。