Bug处理一则:Python中的Json和Unicode的恩怨情仇

昨天写了一个bug改了一天没改出来,今天接着写,脑袋顶上突然就冒了电灯泡。

流程如下:

1. 从数据库取出一个标准json字符串:

{"1": { "RD": null, "length": 90.0, "extend_reason": "ffff", "pass": false, "operator": "ou_89bf143e43", "solve_time": null, "iter": 1, "extend_time": "2020-07-09 03:18:46"}}

2.  json.loads 变成Python Dict, 然后其中增加如下字段:

"has_executed": true

3. 把加完了的Json存回数据库。

4. 再次取用该Json时,报错 JSON ValueError: Expecting property name: line 1 column 2 (char 1)

  此时查看字符串,变成了

{u"1":{u"has_executed":true,u"RD":null,u"length":90,u"extend_reason":u"ffff",u"pass":false,u"operator":u"ou_892bcc3d74cdcb2e8cf4a7c4bf143e43",u"solve_time":null,u"iter":1,u"extend_time":u"2020-07-09 03:18:46"}}

  可见所有的string前面都多了unicode标示,同时在数据库中存下来的内容也变成了这样。

百思不得其解,不得已滚回家睡觉。

早晨醒过来想起来了自己的错误:

json.loads()以后,一个标准Json字符串被转换成了Python Dict,添加内容后我没有使用json.dumps()将其转换回标准Json字串,就直接执行了写数据库,于是乎Python Dict被强制转换成string,带着u‘’标记存入了数据库。这个原本标准的json也就变了样子。

早晨加了一句dumps在存数据库,Bug解决了。


posted @ 2020-07-09 11:54  Approid  阅读(356)  评论(0编辑  收藏  举报