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

如何从osu API返回的JSON中获取pp_rank字段

问题:获取osu API返回的pp_rank报错

我尝试从osu.ppy.sh的API获取玩家的pp_rank,使用以下代码发起请求:

baseUrl = 'https://osu.ppy.sh/api/{}?k=api_key'
url = baseUrl.format("get_user") + "&u=" + username
r = requests.get(url)
stats = r.json()
print(stats)

该代码返回的JSON数据如下:

[
    {
        "user_id": "11367222",
        "username": "lifeline",
        "join_date": "2017-12-19 00:18:20",
        "count300": "45329017",
        "count100": "4326758",
        "count50": "422297",
        "playcount": "222948",
        "ranked_score": "80664364190",
        "total_score": "531251267911",
        "pp_rank": "2",
        "level": "105.043",
        "pp_raw": "22645.8",
        "accuracy": "98.44232177734375",
        "count_rank_ss": "31",
        "count_rank_ssh": "130",
        "count_rank_s": "505",
        "count_rank_sh": "2497",
        "count_rank_a": "2321",
        "country": "ID",
        "total_seconds_played": "9463354",
        "pp_country_rank": "1",
        "events": [
            {
                "display_html": "<img src='/images/B_small.png'/> <b><a href='/u/11367222'>lifeline</b> achieved rank #755 on <a href='/b/2777202?m=0'>Faylan - Enrei Black Out [Disappear] (osu!)",
                "beatmap_id": "2777202",
                "beatmapset_id": "1340611",
                "date": "2023-07-06 02:23:41",
                "epicfactor": "1"
            },
            {
                "display_html": "<img src='/images/A_small.png'/> <b><a href='/u/11367222'>lifeline achieved <b>rank #23 on <a href='/b/2829420?m=0'>yuikonnu & ayaponzu* - Super Nuko World [Cat] (osu!)",
                "beatmap_id": "2829420",
                "beatmapset_id": "1368212",
                "date": "2023-07-06 01:16:36",
                "epicfactor": "2"
            },
            {
                "display_html": "<img src='/images/A_small.png'/> <b><a href='/u/11367222'>lifeline</b> achieved rank #54 on <a href='/b/4114798?m=0'>Ryokuoushoku Shakai - Natsu o Ikiru [Azure] (osu!)",
                "beatmap_id": "4114798",
                "beatmapset_id": "1981601",
                "date": "2023-07-06 01:07:17",
                "epicfactor": "1"
            },
            {
                "display_html": "<img src='/images/SH_small.png'/> <b><a href='/u/11367222'>lifeline achieved <b>rank #2</b> on <a href='/b/4103973?m=0'>MAN WITH A MISSION x milet - Kizuna no Kiseki (TV Size) [Kujinn's Purgatory] (osu!)",
                "beatmap_id": "4103973",
                "beatmapset_id": "1976994",
                "date": "2023-07-06 00:56:40",
                "epicfactor": "4"
            }
        ]
    }
]

我尝试用语句 print(stats[pp_rank]) 获取pp_rank,但出现报错,请问该如何解决?


解决方法

报错原因

  1. stats 是一个列表(数组),API返回的用户数据被包裹在数组中,即使只查询单个用户,也会返回数组格式
  2. pp_rank 是未定义的变量,访问字典键需要用字符串形式的键名 'pp_rank'

正确代码

# 取出列表中的第一个用户字典对象
user_data = stats[0]
# 获取pp_rank字段
print(user_data['pp_rank'])

# 或直接一行完成
print(stats[0]['pp_rank'])

额外说明

如果需要将pp_rank转为整数类型(方便后续计算),可以使用:

pp_rank = int(stats[0]['pp_rank'])
print(pp_rank)

内容的提问来源于stack exchange,提问作者Alex is funny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:58:07