flask查询User,返回对象列表,提示ypeError: Object of type ‘bytes‘ is not JSON serializable解决办法

先把对象转换字典:

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.INTEGER,primary_key=True)
    login_name = db.Column(db.String(80),unique=True)
    create_time = db.Column(db.String(80),nullable=False)
    sex = db.Column(db.String(80),nullable=False)
    cellphone = db.Column(db.String(80),nullable=False)
    cname = db.Column(db.String(80),nullable=False)
    password = db.Column(db.String(80),nullable=False)
    head_portrait = db.Column(db.String(80),nullable=False)
    birthday = db.Column(db.String(80),nullable=False)
    stature = db.Column(db.String(80),nullable=False)
    weight = db.Column(db.String(80),nullable=False)
    medical_history = db.Column(db.String(80),nullable=False)
    update_time = db.Column(db.String(80),nullable=False)
    location = db.Column(db.String(80),nullable=False)
    blood_glucose = db.Column(db.String(80),nullable=False)
    lastLoginTime = db.Column(db.String(80),nullable=False)
    newUploadTime = db.Column(db.String(80),nullable=False)
    identity = db.Column(db.String(80),nullable=False)
    deviceid = db.Column(db.String(80),nullable=False)
    head_portrait_time = db.Column(db.String(80),nullable=False)
    accid = db.Column(db.String(80),nullable=False)
    token = db.Column(db.String(80),nullable=False)
    wallet = db.Column(db.String(80),nullable=False)
    idcardNum = db.Column(db.String(80),nullable=False)
    faith = db.Column(db.String(80),nullable=False)
    nation = db.Column(db.String(80),nullable=False)
    status = db.Column(db.String(80),nullable=False)
    country_code = db.Column(db.String(80),nullable=False)
    time_diff = db.Column(db.String(80),nullable=False)
    final_phone = db.Column(db.String(80),nullable=False)
    enterprise_id = db.Column(db.String(80),nullable=False)
    thirdUserid = db.Column(db.String(80),nullable=False)
    isDoctor = db.Column(db.String(80),nullable=False)
    isNurse = db.Column(db.String(80),nullable=False)
    imAccid = db.Column(db.String(80),nullable=False)
    payPassWord = db.Column(db.String(80),nullable=False)
    isCancel = db.Column(db.String(80),nullable=False)
    recommendUser = db.Column(db.String(80),nullable=False)

    def keys(self):
        return ('id','login_name','create_time','sex','cellphone','cname','password','head_portrait','birthday','stature','weight','medical_history','update_time','location','blood_glucose','lastLoginTime','newUploadTime','identity','deviceid','head_portrait_time','accid','token','wallet','idcardNum','faith','nation','status','country_code','time_diff','final_phone','enterprise_id','thirdUserid','isDoctor','isNurse','imAccid','payPassWord','isCancel','recommendUser')

    def __getitem__(self, item):
        return getattr(self, item)

很关键的俩个方法: 

def keys(self):

def __getitem__(self,item)

 然后调用对象的dict()fang方法。

@app.route('/select_user')
def select_user():
    # 查询所有用户
    users_list = User.query.all()
    list = [dict(i) for i in users_list]
    return json.dumps(list,cls=DateEncoder,indent=4)

给前端返回去一个json,又出问题:

提示:ypeError: Object of type 'bytes' is not JSON serializable

import json
class MyEncoder(json.JSONEncoder):

    def default(self, obj):
        """
        只要检查到了是bytes类型的数据就把它转为str类型
        :param obj:
        :return:
        """
        if isinstance(obj, bytes):
            return str(obj, encoding='utf-8')
        return json.JSONEncoder.default(self, obj)

解决了,网上找到的

又提示:Object of type 'datetime' is not JSON serializable

import json
import datetime
class DateEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, datetime.date):
            return obj.strftime("%Y-%m-%d")
        
        else:
            return json.JSONEncoder.default(self, obj)

解决掉了,最后想着结合一下:

import json
import datetime
class DateEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, datetime.date):
            return obj.strftime("%Y-%m-%d")
        elif isinstance(obj, bytes):
            return str(obj, encoding='utf-8')
        else:
            return json.JSONEncoder.default(self, obj)

就彻底好了,

瞬间好了,很欣慰撒。。。。。。。。。。。。。。。

贴个图,下班回家。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值