python
type_error
ai_generated
true
TypeError: Object of type Product is not JSON serializable
ID: python/flask-jsonify-non-serializable-object
80%Fix Rate
85%Confidence
0Evidence
2024-03-15First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| 3.x | active | — | — | — |
Root Cause
在 Flask 的 JSON 响应中直接返回了自定义对象(如 ORM 模型),而 Flask 默认的 JSON 编码器无法处理非基本类型。
generic中文
在 Flask 的 JSON 响应中直接返回了自定义对象(如 ORM 模型),而 Flask 默认的 JSON 编码器无法处理非基本类型。
Workarounds
-
95% success
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% success
from marshmallow import Schema, fields class ProductSchema(Schema): id = fields.Int() name = fields.Str() product_schema = ProductSchema() return product_schema.dump(product)
Dead Ends
Common approaches that don't work:
-
70% fail
虽然可以避免报错,但输出的 JSON 是对象的字符串表示,丢失了字段结构,前端无法使用。
-
90% fail
json.dumps 同样无法处理自定义对象,会抛出相同的 TypeError,即使使用 default 参数也很难正确处理复杂模型。
-
60% fail
如果对象包含关联对象或日期时间等类型,手动转换容易遗漏或出错,导致后续序列化失败或数据不完整。