Django从MySQL数据库读取json类型数据的坑

本文记录了在Django项目中使用不同字段类型存储JSON数据遇到的问题及解决方法,包括选择字段类型、处理JSON格式错误及二进制数据转换等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python从MySQL数据库读取json类型数据的坑

场景:最近在写Django,写到购物车的时候,每次退出时,使用json格式,将购物车中的信息存储到mysql表中,然后在用户每次登陆时,读取相应的数据,显示在前端网页。

1、json格式的数据,以什么样的字段类型存储:

  一开始,我是用的是varchar类型进行存储,但是发现,再登陆时,都取出来的数据变成了字符串类型,之前写好的代码,无法对其进行解析;

  之后,选择了json类型进行存储,结果读取出来也是不能用;

  经过Google,找到了这篇博文,经过阅读,选择了Blob类型进行存储;

2、存储后,再进行登陆,会报错:Expecting property name enclosed in double quotes: line 1 column 2 (char 1):

  还是进行Google,在stackoverflow中,有相关解答;(这篇问答中高票回答,我的情况没有使用他的json.loads(ast.literal_eval()) 这样处理)

  出现这种错误,是因为json格式数据,必须使用双引号,且最后一条数据后面没有逗号;

  去看了下我的mysql中的数据,在django将json数据写入的时候,全部变为了单引号;

  因此,需要将读取出来的数据进行在处理,修改为json标准格式,此时:就需要导入ast库,使用ast.literal_eval()函数进行处理,当然可以使用正则替换方式,将其中的单引号换为双引号;

3、经过以上处理,运行后又出现了问题:malformed node or string: b'{"20": {"id": 20, "goodsname": "\\u795e\\u821f。。。。。

  究其原因:是因为Bolo字段类型,存储的数据为二进制Bytes类型的数据;

  将该数据读取出来,需要将其进行默认转义:data.decode();

  然后再进行ast.literal_eval()的处理;

 

转载于:https://www.cnblogs.com/lambs/p/9316457.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值