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)

猜你喜欢

转载自blog.csdn.net/qq_44464101/article/details/128871509
今日推荐