完美解决:使用flask + SQLAlchemy 时,遇到将python对象转json报TypeError: Object of type set is not JSON serializable
1.重写JSONEncoder
from flask.json import JSONEncoder
import json
from sqlalchemy.ext.declarative import DeclarativeMeta
from datetime import datetime, date
import decimal
import uuid
#自定义JSONEncoderclassCustomJSONEncoder(JSONEncoder):defdefault(self, o):ifisinstance(o.__class__, DeclarativeMeta):
data ={
}
fields = o.__json__()ifhasattr(o,'__json__')elsedir(o)for field in[f for f in fields ifnot f.startswith('_')and f notin['metadata','query','query_class','registry']]:
value = o.__getattribute__(field)try:
json.dumps(value,cls=CustomJSONEncoder)
data[field]= value
except TypeError:
data[field]=Nonereturn data
elifisinstance(o, datetime):return o.strftime('%Y-%m-%d %H:%M:%S')elifisinstance(o, date):return o.strftime('%Y-%m-%d')elifisinstance(o, uuid.UUID):returnstr(o)elifisinstance(o,bytes):return o.decode('utf-8')elifisinstance(o, decimal.Decimal):returnfloat(o)else:return JSONEncoder.default(self, o)