“ObjectID”类型的对象不是JSON可序列化的

时间:2017-08-10 13:58:17

标签: python-3.x pymongo flask-restful

我有一个看似常见的问题,但到目前为止我看不到适用于我的解决方案。我想我只是错过了一些小事,但我已经打破了寻求帮助。我正在尝试使用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对象进行双重编码来清除序列化错误。似乎这对我正在做的事情来说不是一个好的解决方案。

3 个答案:

答案 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")