场景:最近在写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()的处理;