昨天写了一个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解决了。