Python3加载JSON文件得到字符串类型无法作为字典提取值怎么办
问题原因
- 你的JSON文件存储的是双重序列化后的JSON内容:原始字典数据先被执行了一次JSON序列化转为字符串,随后这个字符串本身又被当作值做了第二次JSON序列化后写入了文件。
- 你给出的示例内容
"{\"fakeData\": \"fakeName\"}"就是典型的双重序列化结果:外层的引号包裹的是已经序列化过的JSON字符串,第一次调用json.load只会解开最外层的序列化结构,所以得到的就是内层的字符串类型数据。
解决方法
临时适配现有文件
对第一次json.load得到的字符串,再调用一次json.loads做二次反序列化即可得到字典类型,示例代码如下:
import json for files in listDirectoryFiles: with open(files) as json_file: # 第一次反序列化得到字符串 str_data = json.load(json_file) # 第二次反序列化得到目标字典 data = json.loads(str_data) # 现在可正常提取字段 print(data["fakeData"])
从根源修复问题
排查生成这些JSON文件的上游代码,删除多余的序列化操作:写入JSON文件时直接对原始字典执行序列化即可,不要把已经转成JSON格式的字符串二次序列化后再写入文件。
正确的JSON文件写入参考:
# 正确写法:直接序列化字典写入 origin_data = {"fakeData": "fakeName"} with open("test.json", "w") as f: json.dump(origin_data, f) # 错误写法:多做了一次序列化,会导致后续读取得到字符串 wrong_data = json.dumps(origin_data) with open("test.json", "w") as f: json.dump(wrong_data, f)
内容的提问来源于stack exchange,提问作者Brian Johnson
相关产品推荐
相关产品推荐

