json.dumps数据库查询结果 转成 Json有时候会报错 raise TypeError(repr(o) + " is not JSON serializable")
这个是因为查询结果集里有dumps无法识别的类型 需要手动去转换成字符串类型 包括None类型也会报错 我的解决方法是如下
json.dumps(要序列化的数据,cls = Serializable_Conversion)
# Json序列化过滤错误
class Serializable_Conversion(json.JSONEncoder):
def default(self, obj):
if isinstance(obj.__class__, DeclarativeMeta):
app.logger.info(obj)
# an SQLAlchemy class
fields = {}
#过滤无效字段
for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and x != 'query' and x != 'query_class']:
data = obj.__getattribute__(field)
try:
#判断类型 因为该类型无法序列化 所以强转为字符串 其他类型也是真么写 添加一下就可以
if isinstance(data,Decimal):
fields[field] = str(data)
elif data==None :
fields[field] = ''
else:
json.dumps(data)
fields[field] = data
except TypeError:
fields[field] = str(data)
# a json-encodable dict
return fields
return json.JSONEncoder.default(self, obj)