[英]Serializing MongoDB find() return into non-anonymous JSON array, using PyMongo
我的Python代碼查詢MongoDB並獲取以下對象的數組 :
{
u'attribute': u'value',
u'_id': ObjectId('534776c66e5987041f6154bd')
}
我要實現的是返回以下JSON:
{
'mycollectionkey' : [
{
'attribute':'value',
'_id': ObjectId('534776c66e5987041f6154bd')
},
...and so on.
]
}
但是,當我這樣做時:
docs = mongodb.find(...query...)
docs_json = bson.json_util.dumps(docs)
return flask.jsonify(success=True,mycollectionkey=docs_json)
我得到: { 'mycollectionkey' : "*giant string representation of data*" }
其中所說的巨型字符串顯然不再是JSON。
這里的問題是,在將響應傳遞到另一個數據結構(現在是字符串)之前,您已經將響應字符串化為JSON,以便將其返回為JSON。 因此,您基本上在進行雙重編碼,並且對“字符串”進行了編碼。
因此,只需傳遞一次數據:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
因此,在這樣的一個小集合中:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
喲得到這樣的結果:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
如果您真的擔心這兩個鍵的順序,則可以使用bson“轉儲”轉到一個字符串,然后使用標准的json解碼器進行解碼,以便獲得將Mongo對象反序列化的本機字典,然后進一步放入您訂購的字典。
但是實際上,您的客戶不應該關心鍵的順序,而只希望那些根元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.