我有一个看似常见的问题,但到目前为止我看不到适用于我的解决方案。我想我只是错过了一些小事,但我已经打破了寻求帮助。我正在尝试使用flask和pymongo获得json输出。
这是控制台中使用print(结果)的对象:
[{'_id': ObjectId('598b5de38161a821188f1a7c'), 'first name': 'first name', 'last Name': 'last name'}]
当我尝试返回时,我收到错误: TypeError:“ObjectId”类型的对象不是JSON可序列化的
类联系人(资源):
def get(self):
results =[]
connect = MongoClient("<REMOVED>")
db = connect['<REMOVED>']
collection = db['contact']
contacts = collection.find()
if collection:
number_of_contacts = collection.count()
for document in contacts:
results.append(document)
print(results)
return {'results': results, 'count': number_of_contacts}
我尝试过bson.json_util建议。它确实通过对我的json对象进行双重编码来清除序列化错误。似乎这对我正在做的事情来说不是一个好的解决方案。
答案 0 :(得分:5)
看起来一个简单的解决方案就是将_id转换为符合我们要求的字符串。
sys.objects
找到解决方案阅读Getting 'TypeError: ObjectId('') is not JSON serializable' when using Flask 0.10.1
答案 1 :(得分:0)
from bson import json_util
items = mongo.db.shop_items.find_one({"item_name": "abc"})
return make_response(json_util.dumps({"items": items}), HTTPStatus.OK)
---这解决了我的错误。
答案 2 :(得分:0)
我认为这对您会有所帮助。
from flask import Response
...
...
list_of_books = mongo_db.db[BOOK_COLLECTION].find()
list_of_books = [each_book for each_book in list_of_books]
return Response(json.dumps(list_of_books,default=str),mimetype="application/json")