You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理CTA Train Tracker API的JSON数组不一致报错问题

解决CTA Train Tracker API解析的TypeError问题

这个坑我太熟了——不少公共API为了所谓的“简洁”,会搞这种不一致的返回结构:多条数据时给数组,单条时直接返回单个对象,没数据时还可能返回null或者干脆缺省字段,直接把我们的解析逻辑搞崩。针对你遇到的情况,咱们通过统一数据结构就能彻底解决这个问题。

核心思路

不管API返回的train字段是单个字典、数组,还是空值,我们都把它转换成列表类型:

  • 如果是数组:直接用
  • 如果是单个字典:包装成只有一个元素的列表
  • 如果是空值(比如'g'线路无运行记录):返回空列表

具体代码实现

写个小工具函数来统一处理这个字段,后续解析逻辑就不用反复判断类型了:

def normalize_train_data(train_data):
    # 处理无运行记录的情况(比如'g'线路)
    if not train_data:
        return []
    # 单条记录时,把字典包装成列表
    elif isinstance(train_data, dict):
        return [train_data]
    # 多条记录时直接返回原列表
    elif isinstance(train_data, list):
        return train_data
    # 极端异常情况(比如返回了字符串),返回空列表兜底
    else:
        return []

然后在你的解析代码里这么用:

# 假设你已经拿到了API返回的JSON数据,存在response_json变量里
raw_train_data = response_json.get('train')
# 先标准化数据结构
trains = normalize_train_data(raw_train_data)

# 现在可以放心遍历了,0条、1条、多条记录都不会报错
for train in trains:
    # 示例:提取线路、站点ID等信息
    route = train.get('rt')
    station_id = train.get('staId')
    print(f"线路{route}的列车当前在站点{station_id}")

额外小建议

  • 尽量用dict.get(key)代替直接dict[key]访问字段,就算某个字段缺失也不会抛出KeyError,代码更健壮。
  • 调试时可以先打印下原始数据的类型和内容,方便快速定位问题:
    print(f"原始train数据类型:{type(raw_train_data)},内容:{raw_train_data}")
    

这样处理后,不管是'y'线路的单条记录、'blue'线路的多条记录,还是'g'线路的空记录,你的代码都能平稳运行,再也不会碰到string indices must be integers这种错误啦。

内容的提问来源于stack exchange,提问作者Neal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:57:43