Python解析CSV文件JSON列提取employee_id时出现JSONDecodeError报错
问题成因
- 代码缩进错误:遍历
csv_reader的循环写在了with代码块外部,with块执行结束后CSV文件会被自动关闭,csv_reader无法正常读取文件内容,导致拿到的event_data为空字符串,json.loads解析空值时就会抛出第0位字符不符合JSON格式的错误。 - JSON列被双重编码:从你提供的
event_data样例可以看到,存储的内容外层额外包裹了一对双引号,内部的双引号也被加了反斜杠转义,相当于合法JSON字符串被额外做了一次转义封装,直接传入json.loads无法正常解析。
解决方案
先修正代码缩进,再处理双重编码的字符串即可,修正后代码如下:
import csv import json import ast with open('data.csv') as csvFile: csv_reader = csv.reader(csvFile, delimiter=',') # 遍历逻辑放在with块内部,保证读取时文件处于打开状态 for row in csv_reader: event_data = row[4] # 先解析外层转义和包裹的引号,拿到合法JSON字符串 raw_json = ast.literal_eval(event_data) # 解析JSON字符串得到字典 data = json.loads(raw_json) print(data['employee_id'])
如果不想引入ast依赖,也可以直接调用两次json.loads实现相同效果:
data = json.loads(json.loads(event_data))
内容的提问来源于stack exchange,提问作者adamn11
相关产品推荐
相关产品推荐

