python type_error ai_generated true

类型错误:Product 类型的对象无法进行 JSON 序列化

TypeError: Object of type Product is not JSON serializable

ID: python/flask-jsonify-non-serializable-object

其他格式: JSON · Markdown 中文 · English
80%修复率
85%置信度
0证据数
2024-03-15首次发现

版本兼容性

版本状态引入弃用备注
3.x active

根因分析

在 Flask 的 JSON 响应中直接返回了自定义对象(如 ORM 模型),而 Flask 默认的 JSON 编码器无法处理非基本类型。

English

在 Flask 的 JSON 响应中直接返回了自定义对象(如 ORM 模型),而 Flask 默认的 JSON 编码器无法处理非基本类型。

generic

解决方案

  1. 95% 成功率
    class CustomJSONEncoder(JSONEncoder):
        def default(self, obj):
            if isinstance(obj, Product):
                return {'id': obj.id, 'name': obj.name}
            return super().default(obj)
    app.json_encoder = CustomJSONEncoder
  2. 90% 成功率
    from marshmallow import Schema, fields
    class ProductSchema(Schema):
        id = fields.Int()
        name = fields.Str()
    product_schema = ProductSchema()
    return product_schema.dump(product)

无效尝试

常见但无效的做法:

  1. 70% 失败

    虽然可以避免报错,但输出的 JSON 是对象的字符串表示,丢失了字段结构,前端无法使用。

  2. 90% 失败

    json.dumps 同样无法处理自定义对象,会抛出相同的 TypeError,即使使用 default 参数也很难正确处理复杂模型。

  3. 60% 失败

    如果对象包含关联对象或日期时间等类型,手动转换容易遗漏或出错,导致后续序列化失败或数据不完整。