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

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()的处理

猜你喜欢

转载自www.cnblogs.com/lambs/p/9316457.html