python
type_error
ai_generated
true
类型错误:Product 类型的对象无法进行 JSON 序列化
TypeError: Object of type Product is not JSON serializable
ID: python/flask-jsonify-non-serializable-object
80%修复率
85%置信度
0证据数
2024-03-15首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 3.x | active | — | — | — |
根因分析
在 Flask 的 JSON 响应中直接返回了自定义对象(如 ORM 模型),而 Flask 默认的 JSON 编码器无法处理非基本类型。
English
在 Flask 的 JSON 响应中直接返回了自定义对象(如 ORM 模型),而 Flask 默认的 JSON 编码器无法处理非基本类型。
解决方案
-
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 -
90% 成功率
from marshmallow import Schema, fields class ProductSchema(Schema): id = fields.Int() name = fields.Str() product_schema = ProductSchema() return product_schema.dump(product)
无效尝试
常见但无效的做法:
-
70% 失败
虽然可以避免报错,但输出的 JSON 是对象的字符串表示,丢失了字段结构,前端无法使用。
-
90% 失败
json.dumps 同样无法处理自定义对象,会抛出相同的 TypeError,即使使用 default 参数也很难正确处理复杂模型。
-
60% 失败
如果对象包含关联对象或日期时间等类型,手动转换容易遗漏或出错,导致后续序列化失败或数据不完整。