如何从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,但出现报错,请问该如何解决?
解决方法
报错原因
stats是一个列表(数组),API返回的用户数据被包裹在数组中,即使只查询单个用户,也会返回数组格式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
相关产品推荐
相关产品推荐

