json的结果,这坑终于被我挖出来了

事情的起因我就不说了,总之是一个json惹的祸。以前也发生了这样的问题,但是我没有在意,以为是我疏忽了,今天才发现,原来你是这样的json!

呐,其实很简单,随便几行代码就能说清楚:

import json
dic = {1: "apple", 2: "banana", 3: "cat"}
dump_dic = json.dumps(dic)
print(json.loads(dump_dic))

就是简单地把一个字典dumps再loads,结果应该跟原来的dic是一样的吧。以前我就是这样认为的。

结果,loads出来的结果是这样的:

{'1': 'apple', '2': 'banana', '3': 'cat'}

看出问题了没?如果没看出来,我们再来仔细对比一下:

之前: {1: "apple", 2: "banana", 3: "cat"}
之后: {'1': 'apple', '2': 'banana', '3': 'cat'}

没错!loads之后,字典中的key从整型变成了字符串!

可能是json的定义相对简单吧,拿来用用就上手了,我从来没有注意过这一点。之后我又试了试,发现在对原字典dumps的过程中,key就变成了字符串(但是value不会变,还是数字)。

跟同事说了一下这个问题,同事说,用一些在线的json格式检查工具试试就知道了,json格式的key不允许是数字。

好吧,我傻了。也许是python在dumps的时候不会严格检查吧。

 

posted @ 2021-01-21 20:21  _小苹果  阅读(177)  评论(0编辑  收藏  举报