Problém je v tom, že jste již odpověď strunizovali jako JSON, než ji předali do jiné datové struktury (nyní jako řetězec), abyste ji vrátili jako JSON. Takže v podstatě provádíte dvojité kódování a „řetězec“ se zakóduje.
Stačí tedy zadat data jednou:
docs = mongodb.find(...query...)
return bson.json_util.dumps({ 'success': True, 'mycollectionKey': docs })
Takže na malé sbírce, jako je tato:
{ "_id" : ObjectId("5343aeb5efbdb94c3647c8df"), "field" : "BBB" }
{ "_id" : ObjectId("5343aebbefbdb94c3647c8e0"), "field" : "aaa" }
{ "_id" : ObjectId("5343aebfefbdb94c3647c8e1"), "field" : "AAA" }
Získáte výsledek takto:
{
"mycollectionKey": [
{"field": "BBB", "_id": {"$oid": "5343aeb5efbdb94c3647c8df"}},
{"field": "aaa", "_id": {"$oid": "5343aebbefbdb94c3647c8e0"}},
{"field": "AAA", "_id": {"$oid": "5343aebfefbdb94c3647c8e1"}}
],
"success": true
}
Pokud se opravdu obáváte o pořadí těchto dvou klíčů, můžete použít „výpisy“ bson k přechodu na řetězec a poté dekódování pomocí standardního dekodéru json, abyste získali nativní dikt s deserializovanými objekty Mongo, které pak dále vložte do váš nařízený diktát.
Ale ve skutečnosti by se váš klient neměl starat o pořadí klíčů a měl by očekávat pouze kořenové prvky.