踩坑日志:python json.dump()的一个坑
背景:
最近在做python开发时遇到了一个有意思的坑点,有关python json库的接口使用。作者在最近开发时希望将代码中的一个字典数据结构保存到磁盘文件中作持久化,以便之后重新读取保存的数据,因而借用了常用的json库。json库的使用比较方便,json.dump()可以将字典格式序列化为字符串,并保存到文件,而json.load()可以读取文件将字符串反序列化为字典格式。
问题描述:
直接上示例代码:
import json
d = {0:[1, 2]}
path = "D:\\download\\test.json"
with open(path, 'w') as f:
json.dump(d, f)
with open(path, 'r') as g:
data = json.load(g)
print(data)
print(data["0"])
print(data[0])
# 运行结果:
{'0': [1, 2]}
[1, 2]
KeyError: 0
在对字典d使用json.dump输出到文件时,数据的格式发生了变化。原本字典中的key值为0,是一个int类型,但实际dump到文件中却变成了“0”,是一个str类型。这导致后续在json.load重新读取该数据时,用int类型的0作为键值去检索该字典会产生KeyError异常,因而搜索不到想要的数据(json.load可不会那么聪明,帮你把"0"转回0)。
因此,后续使用到json库,尤其是dump函数时,需要特别小心,以防数据格式发生转换而又难以定位。