【问题标题】:How to correctly jsonify Mongo DB documents when "ObjectId is not JSON serializable?"当“ObjectId 不是 JSON 可序列化”时,如何正确 jsonify Mongo DB 文档?
【发布时间】:2020-07-16 03:15:35
【问题描述】:

我正在为我的 Python 应用程序设置 MongoDB,并拥有以下代码:

@app.route('/user/<firstName>', methods=['GET'])
def getUser(firstName):
    print(firstName)
    return jsonify({'users': Users.find({'first_name': firstName})[0]})

抛出此错误:TypeError: ObjectId 类型的对象不是 JSON 可序列化的 由于 _id 字段为 '_id': ObjectId('5e8676dc0d16f3567167d889')。

我该如何解决这个问题?

【问题讨论】:

  • 这能回答你的问题吗? JSON serializing Mongodb
  • @Joe 不,他们没有。
  • 如果将 BSON 转换为 JSON 的 json_util 函数不起作用,那么您要做什么?
  • @Joe 试图对 Pymongo 对象进行 jsonify,但我能够使用自定义 JSON 编码器。这是由于 ObjectId 字段不可序列化。

标签: python mongodb rest flask


【解决方案1】:

在某个地方找到了这段代码,现在它可以工作了。 *如果有人知道这是从哪里来的,请注明。

class JSONEncoder(json.JSONEncoder):
    ''' extend json-encoder class'''
    def default(self, o):
        if isinstance(o, ObjectId):
            return str(o)
        if isinstance(o, datetime.datetime):
            return str(o)
        return json.JSONEncoder.default(self, o)


# use the modified encoder class to handle ObjectId & datetime object while jsonifying the response.
app.json_encoder = JSONEncoder

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2013-05-11
    • 2019-07-27
    • 2018-01-18
    • 2019-04-26
    • 1970-01-01
    • 2019-07-17
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多