Em primeiro lugar
find_one
retornará um único dicionário ou Nenhum se não houver nenhum elemento correspondente na coleção. Então eu acho que page[0]
é equivalente a obter o valor do dicionário de páginas para a chave 0
Se os documentos retornados contiverem
ObjectId
como _id
você não pode simplesmente usar jsonify
porque, como ObjectId
não é serializável JSON. Você pode usar algo assim:jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
ou você pode simplesmente remover
_id
chamando page.pop('_id')
Você também pode usar
bson.json_util
. Ele contém ferramentas para conversão entre BSON e JSON. from flask import Response
from bson import json_util
E, em seguida, substitua
jsonify
com algo parecido com isso:return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Editar
Se você quiser uma maneira curta e suja de lidar com o problema, pode fazer assim:
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))