Pymongo/bson:将python.cursor.Cursor对象转换为serializable/JSON对象
Pymongo/bson: Convert python.cursor.Cursor object to serializable/JSON object
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 对象?
使用来自 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"}}]'
Simple Solution
// 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
是的,您当然可以使用 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)
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 对象?
使用来自 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"}}]'
Simple Solution
// 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
是的,您当然可以使用 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)