Allereerst find_one
retourneert één woordenboek of Geen als er geen overeenkomend element in de verzameling is. Dus ik denk dat page[0]
is gelijk aan het verkrijgen van de waarde van het paginawoordenboek voor sleutel 0
Als geretourneerde documenten ObjectId
. bevatten als _id
je kunt niet zomaar jsonify
gebruiken omdat, zoals ObjectId
is niet JSON serialiseerbaar. Je kunt zoiets als dit gebruiken:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
of je kunt eenvoudig _id
. verwijderen door page.pop('_id')
. te bellen
Je kunt ook bson.json_util
gebruiken
. Het bevat tools voor conversie tussen BSON en JSON.
from flask import Response
from bson import json_util
En vervang dan jsonify
met iets soortgelijks als dit:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Bewerken
Als je een korte en vuile manier wilt om met het probleem om te gaan, kun je het als volgt doen:
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))