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

- **ID:** `python/flask-jsonify-non-serializable-object`
- **领域:** python
- **类别:** type_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

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

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 3.x | active | — | — |

## 解决方案

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)
   ```

## 无效尝试

- **** — 虽然可以避免报错，但输出的 JSON 是对象的字符串表示，丢失了字段结构，前端无法使用。 (70% 失败率)
- **** — json.dumps 同样无法处理自定义对象，会抛出相同的 TypeError，即使使用 default 参数也很难正确处理复杂模型。 (90% 失败率)
- **** — 如果对象包含关联对象或日期时间等类型，手动转换容易遗漏或出错，导致后续序列化失败或数据不完整。 (60% 失败率)
