当前位置:   article > 正文

使用sqlalchemy时查询结果Json序列化失败问题 is not JSON serializable_raise typeerror(repr(o) + " is not json serializab

raise typeerror(repr(o) + " is not json serializable")

json.dumps数据库查询结果 转成 Json有时候会报错 raise TypeError(repr(o) + " is not JSON serializable")
这个是因为查询结果集里有dumps无法识别的类型  需要手动去转换成字符串类型 包括None类型也会报错 我的解决方法是如下

  1. json.dumps(要序列化的数据,cls = Serializable_Conversion)
  2. # Json序列化过滤错误
  3. class Serializable_Conversion(json.JSONEncoder):
  4. def default(self, obj):
  5. if isinstance(obj.__class__, DeclarativeMeta):
  6. app.logger.info(obj)
  7. # an SQLAlchemy class
  8. fields = {}
  9. #过滤无效字段
  10. for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and x != 'query' and x != 'query_class']:
  11. data = obj.__getattribute__(field)
  12. try:
  13. #判断类型 因为该类型无法序列化 所以强转为字符串 其他类型也是真么写 添加一下就可以
  14. if isinstance(data,Decimal):
  15. fields[field] = str(data)
  16. elif data==None :
  17. fields[field] = ''
  18. else:
  19. json.dumps(data)
  20. fields[field] = data
  21. except TypeError:
  22. fields[field] = str(data)
  23. # a json-encodable dict
  24. return fields
  25. return json.JSONEncoder.default(self, obj)

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号