web-dev-qa-db-ja.com

Pymongo / bson:python.cursor.Cursorオブジェクトをserializable / JSONオブジェクトに変換します

MongoDbとPython(webapp2)。だから、私はmongodbデータベースからデータをフェッチしていました。しかし、私はjson.dumps返されたデータ。これが私のコードです:

exchangedata = db.Stock_Master.find({"Country": "PHILIPPINES"}, {"_id" : 0})        
self.response.write(json.dumps(exchangedata)) 

これはエラーをスローします:

TypeError: pymongo.cursor.Cursor object at 0x7fcd51230290 is not JSON serializable

exchangedataのタイプはpymongo.cursor.Cursor。どうすればjsonオブジェクトに変換できますか?

19
Tarun Dugar

bson.json_util からのダンプを使用:

>>> c = pymongo.MongoClient()
>>> c.test.test.count()
5
>>> from bson.json_util import dumps
>>> dumps(c.test.test.find())
'[{"_id": {"$oid": "555cb3a7fa5bd85b81d5a624"}}, {"_id": {"$oid": "555cb3a7fa5bd85b81d5a625"}}, {"_id": {"$oid": "555cb3a7fa5bd85b81d5a626"}}, {"_id": {"$oid": "555cb3a7fa5bd85b81d5a627"}}, {"_id": {"$oid": "555cb3a7fa5bd85b81d5a628"}}]'
27
Bernie Hackett

シンプルなソリューション

 // Use dumps from bson.json_util:
from bson.json_util import dumps

@app.route("/")
def home_page():

    booking = dumps(mongo.db.bookings.find())
    print booking
    return  booking
1
ngCourse

はい、もちろんbson.json_utilパッケージのdumps()を使用できます。しかし、dumps()は引用された結果を提供します。明確なjson結果を取得するには、次のコードを使用できます。

clean_json = re.compile('ISODate\(("[^"]+")\)').sub('\\1', 
        dumps(my_db._my_collection.find(query), 
                 json_options=CANONICAL_JSON_OPTIONS))
json_obj = json.loads(clean_json)

クレジットは here に送られます。

0