Nejprve find_one
vrátí jeden slovník nebo Žádný, pokud v kolekci není žádný odpovídající prvek. Takže si myslím, že page[0]
je ekvivalentní získání hodnoty stránkového slovníku pro klíč 0
Pokud vrácené dokumenty obsahují ObjectId
jako _id
nemůžete jednoduše použít jsonify
protože jako ObjectId
není možné serializovat JSON. Můžete použít něco takového:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
nebo můžete jednoduše odstranit _id
voláním page.pop('_id')
Můžete také použít bson.json_util
. Obsahuje nástroje pro převod mezi BSON a JSON.
from flask import Response
from bson import json_util
A pak nahraďte jsonify
s něčím podobným:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Upravit
Pokud chcete krátký a špinavý způsob řešení problému, můžete to udělat takto:
from bson import json_util, ObjectId
import json
#Lets create some dummy document to prove it will work
page = {'foo': ObjectId(), 'bar': [ObjectId(), ObjectId()]}
#Dump loaded BSON to valid JSON string and reload it as dict
page_sanitized = json.loads(json_util.dumps(page))