सबसे पहले 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))