まず第一にfind_one
コレクションに一致する要素がない場合は、単一の辞書またはNoneを返します。だから私はpage[0]
キー0
のページディクショナリの値を取得するのと同じです
返されたドキュメントにObjectId
が含まれている場合 _id
として 単純にjsonify
を使用することはできません なぜなら、ObjectId
のように JSONシリアル化可能ではありません。次のようなものを使用できます:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
または、単に_id
を削除することもできます page.pop('_id')
を呼び出す
bson.json_util
を使用することもできます
。 BSONとJSONを変換するためのツールが含まれています。
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))