将JSON字符串转为列表后访问第三个元素报索引超出范围如何解决
问题原因
从你提供的原始输出可以看到,共有3组JSON数据:
- 第一组的首个元素是长度为3的列表
["1", 1, "hy3mRUeEcb18NLC1"],可以正常访问索引2的元素 - 后两组的首个元素都是空列表
[],长度为0,访问索引2就会触发list index out of range报错
解决方案
在访问列表索引前,先对列表长度做校验,避免空数据场景下的越界问题,参考代码如下:
import json # 解析JSON loaded_json = json.loads(x.task_params) # 取首个元素 task_params = loaded_json[0] # 校验长度后再取值 if len(task_params) >= 3: # 符合格式要求,输出目标值 print(task_params[2]) else: # 不符合格式的场景可根据业务需要处理,比如跳过、打日志等 pass
如果业务侧不需要处理空数据,也可以直接过滤出所有有效目标值:
# 假设all_task_params是所有x.task_params的集合 targets = [] for item in all_task_params: loaded = json.loads(item.task_params)[0] if len(loaded) >=3: targets.append(loaded[2]) print(targets)
运行符合格式的第一条数据时,就能正常输出你期望的hy3mRUeEcb18NLC1。
内容的提问来源于stack exchange,提问作者Frederich Pedersen
相关产品推荐
相关产品推荐

