ここでの問題は、応答をJSONとして返すために、応答を別のデータ構造(現在は文字列)に渡す前に、応答をJSONとして文字列化しておくことです。つまり、基本的に二重エンコードを実行していて、「文字列」がエンコードされます。
したがって、データを1回渡すだけです:
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
}
これらの2つのキーの順序が本当に心配な場合は、bson "dumps"を使用して文字列に移動し、標準のjsonデコーダーでデコードして、Mongoオブジェクトを逆シリアル化したネイティブdictを取得し、さらに注文した口述。
しかし、実際には、クライアントはキーの順序を気にする必要はなく、それらのルート要素を期待するだけです。