json.loads未转换为dict,读取CSV内嵌JSON列取key报错如何解决?
问题原因
你获取到的event_data是双重序列化后的JSON字符串:原始JSON对象被连续转成了两次JSON字符串。从你提供的样例可以看到,内容外层额外包裹了一对双引号,内部的反斜杠就是第一次序列化后,第二次序列化对内部引号做的转义处理。
此时你只调用一次json.loads(),只会剥离外层的转义和引号,得到的结果还是内层的JSON字符串(类型为str),自然无法通过字典的键取值,触发TypeError: string indices must be integers报错。
解决方法
有两种可行方案:
- 方案1(兼容性最高,适配所有双重序列化场景):连续调用两次
json.loads(),第一次解析得到内层JSON字符串,第二次解析得到可直接取值的字典对象。
修改后的代码如下:
import csv import json with open('data.csv') as csvFile: csv_reader = csv.reader(csvFile, delimiter=',') next(csv_reader, None) # 跳过表头行 for row in csv_reader: event_data = row[4] # 第一次解析得到内层JSON字符串 inner_str = json.loads(event_data) # 第二次解析得到字典 data = json.loads(inner_str) print(data['employee_id'])
- 方案2(仅适用于外层仅多包裹一对双引号的场景):先去除字符串首尾的双引号,再调用一次
json.loads()即可。
内容的提问来源于stack exchange,提问作者adamn11
相关产品推荐
相关产品推荐

