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

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

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

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

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

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

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

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

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

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

  去看了下个人mysql中的数据,在django将json数据写入的时候,所有变为了单引号;spa

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

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

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

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

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

相关文章
相关标签/搜索