TypeError: Object of type set is not JSON serializable

完美解决:使用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
#自定义JSONEncoder
class CustomJSONEncoder(JSONEncoder):
    def default(self, o):
            if isinstance(o.__class__, DeclarativeMeta):
                data = {}
                fields = o.__json__() if hasattr(o, '__json__') else dir(o)
                for field in [f for f in fields if not f.startswith('_') and f not in ['metadata', 'query', 'query_class','registry']]:
                    value = o.__getattribute__(field)
                    try:
                        json.dumps(value,cls=CustomJSONEncoder)
                        data[field] = value
                    except TypeError:
                        data[field] = None
                return data

            elif isinstance(o, datetime):
                return o.strftime('%Y-%m-%d %H:%M:%S')
            elif isinstance(o, date):
                return o.strftime('%Y-%m-%d')
            elif isinstance(o, uuid.UUID):
                return str(o)
            elif isinstance(o, bytes):
                return o.decode('utf-8')
            elif isinstance(o, decimal.Decimal):
                return float(o)
            else:
               return JSONEncoder.default(self, o)

2.替换json_encoder

#创建 app
app =Flask(__name__)
#  替换默认的json编码器
app.json_encoder = CustomJSONEncoder

3.json.dumps使用

#object:需要转json的python对象
#cls:替换上面定义的JSONEncoder
#ensure_ascii:解决dumps过程中出现中文乱码
json.dumps(object,cls=CustomJSONEncoder,ensure_ascii=False)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值