2017-01-04 10 views
2

MongoDB 3.4とPython 2.7を使用しています。私はデータベースから文書を取り出し、それを印刷することができ、構造はそれがPython辞書であることを示します。このドキュメントの内容をJSONファイルとして書きたいと思います。私はd = {"one": 1, "two": 2}のような簡単な辞書を作成するときに私はMongoDBのから取得した文書と上記のコードでDを交換する場合、私はその後、Pythonを使用してMongoDB文書からJSONファイルを作成

のObjectIdではありません、私はエラーを取得し、しかしjson.dump(d, open("text.txt", 'w')) を使用してファイルに書き込むことができます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を文字列に置き換えることで問題が解決しました。

関連する問題