You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python RestAPI操作MongoDB报错:Object of type set is not JSON serializable

解决TypeError: Object of type set is not JSON serializable错误

错误根源

你的代码里存在一处返回语句的写法错误,导致生成了set类型数据,而Flask的jsonify无法序列化集合类型:

return jsonify({"ID is not matching"})

在Python中,{"ID is not matching"}会被解析为包含单个字符串的集合(set),而非你预期的键值对字典。jsonify仅支持序列化JSON标准类型(字典、列表、字符串、数字等),集合不在其支持范围内,因此抛出序列化错误。

修复步骤

1. 修正错误的返回格式

将上述返回语句改为标准键值对字典格式,保持和其他错误返回的格式一致:

return jsonify({"Success": False, "message": "ID is not matching"})

2. 修正MongoDB更新操作的合理性

你的$push用法存在逻辑问题:$push用于向MongoDB的数组字段追加元素,但如果目标字段不是数组类型,执行时会报错。如果你的需求是覆盖字段值而非追加到数组,应使用$set操作符:

col.find_one_and_update(
    {'ID': input_data['ID']},
    {'$set': {
        "Details1": input_data["Details1"],
        "data2": input_data["data2"],
        "data3": input_data["data3"],
        "data4": input_data["data4"]
    }}
)

如果确实需要向数组字段追加元素(比如Details1是数组类型),确保每个字段对应数组结构即可,当前$push的多字段写法是合法的。

3. 添加更新成功后的响应

更新操作完成后,返回明确的成功提示:

return jsonify({"Success": True, "message": "User data updated successfully"})

修正后的完整代码片段

class datadetail(Resource):
    def post(self):
        input_data = request.get_json()
        if input_data is None:
            return jsonify({"Success": False , "message": "wrong input parameter"})
    
        elif 'ID' not in input_data:
            return jsonify({"Success": False,"message":"ID missing"})
        else:
            result = col.find_one({"ID" : input_data['ID']})
            if not result:
               return jsonify({"Success": False, "message": "ID is not matching"})
            else:
               col.find_one_and_update(
                   {'ID': input_data['ID']},
                   {'$set': {
                       "Details1": input_data["Details1"],
                       "data2": input_data["data2"],
                       "data3": input_data["data3"],
                       "data4": input_data["data4"]
                   }}
               )
               return jsonify({"Success": True, "message": "User data updated successfully"})

内容的提问来源于stack exchange,提问作者Muhammad Nihal C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:45:36