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

遍历JSON未获取全部预期值 NHL接口高光数据提取结果异常

问题描述

我需要提取每条高光记录的blurb字段值,以及FLASH_1800K_896x504规格对应的播放URL,为此编写了如下遍历代码:

import requests
game_url = "http://statsapi.web.nhl.com/api/v1/game/2021030321/content"
team_response = requests.get(game_url)
js = team_response.json()
newdata = js['highlights']['gameCenter']['items']
for item in newdata:
    print(item['blurb'])
    print(item['playbacks'][3]['url'])

我通过Ctrl-F检索接口返回的完整数据文件,预期应当得到51条对应结果,但实际运行代码仅返回15条,请问是否存在明显的逻辑疏漏导致结果不全?

问题排查结论

你的代码存在两处明确逻辑错误,直接导致结果不全:

  • 取数路径覆盖不全:当前仅遍历了highlights.gameCenter.items节点,该节点仅存储15条官方精选的全场焦点高光。剩余36条单事件、单进球类高光记录存储在同级的highlights.scoreboard.items节点下,两个节点的条目相加才是你检索到的全部51条高光数据。
  • 播放地址提取逻辑不可靠:直接使用固定索引[3]读取playbacks列表元素,完全依赖接口返回的列表顺序,但实际不同高光条目下的播放源排列顺序并不统一,硬编码索引不仅容易取错清晰度规格,遇到playbacks长度不足4的条目还会直接触发索引报错、中断遍历,进一步造成结果缺失。
修正后代码

不要依赖固定索引取播放地址,改为按name字段匹配目标规格FLASH_1800K_896x504,同时合并两个高光节点的全部条目后再遍历:

import requests
game_url = "http://statsapi.web.nhl.com/api/v1/game/2021030321/content"
team_response = requests.get(game_url)
js = team_response.json()

# 合并两个路径下的所有高光条目
all_highlights = js['highlights']['gameCenter']['items'] + js['highlights']['scoreboard']['items']

for item in all_highlights:
    print(item['blurb'])
    play_url = None
    for playback in item['playbacks']:
        if playback['name'] == 'FLASH_1800K_896x504':
            play_url = playback['url']
            break
    print(play_url)

运行后即可正常输出全部51条高光的对应信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:12:24