सबसे पहले find_one संग्रह में कोई मेल खाने वाला तत्व नहीं होने पर एकल शब्दकोश या कोई नहीं लौटाएगा। तो मुझे लगता है कि page[0] कुंजी 0 . के लिए पृष्ठ शब्दकोश का मान प्राप्त करने के बराबर है
यदि लौटाए गए दस्तावेज़ों में ObjectId है _id . के रूप में आप केवल jsonify . का उपयोग नहीं कर सकते क्योंकि, जैसे ObjectId JSON serializable नहीं है। आप कुछ इस तरह का उपयोग कर सकते हैं:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
या आप बस _id . को हटा सकते हैं page.pop('_id') . पर कॉल करके
आप bson.json_util का भी उपयोग कर सकते हैं
. इसमें बीएसओएन और जेएसओएन के बीच रूपांतरण के लिए उपकरण शामिल हैं।
from flask import Response
from bson import json_util
और फिर jsonify . को बदलें कुछ इसी तरह के साथ:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
संपादित करें
यदि आप समस्या से निपटने का छोटा और गंदा तरीका चाहते हैं तो आप इसे इस तरह कर सकते हैं:
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))