Trước hết find_one
sẽ trả về từ điển đơn hoặc Không có nếu không có phần tử phù hợp trong bộ sưu tập. Vì vậy, tôi nghĩ rằng page[0]
tương đương với việc nhận giá trị của từ điển trang cho khóa 0
Nếu tài liệu được trả lại chứa ObjectId
dưới dạng _id
bạn không thể chỉ sử dụng jsonify
bởi vì, như ObjectId
không thể tuần tự hóa JSON. Bạn có thể sử dụng một cái gì đó như sau:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
hoặc bạn có thể chỉ cần xóa _id
bằng cách gọi page.pop('_id')
Bạn cũng có thể sử dụng bson.json_util
. Nó chứa các công cụ để chuyển đổi giữa BSON và JSON.
from flask import Response
from bson import json_util
Và sau đó thay thế jsonify
với một cái gì đó tương tự như sau:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Chỉnh sửa
Nếu bạn muốn cách giải quyết vấn đề ngắn gọn và dễ hiểu, bạn có thể làm như sau:
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))