flask查询User,返回对象列表,提示ypeError: Object of type ‘bytes‘ is not JSON serializable解决办法
Posted 月疯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
就彻底好了,
瞬间好了,很欣慰撒。。。。。。。。。。。。。。。
贴个图,下班回家。
以上是关于flask查询User,返回对象列表,提示ypeError: Object of type ‘bytes‘ is not JSON serializable解决办法的主要内容,如果未能解决你的问题,请参考以下文章
Flask 返回一个正确的列表对象以在 Postman 中进行测试