如何将Scoresaber API多页JSON数据合并为单个JSON输出
解决Scoresaber API多页数据合并问题
问题原因
你的代码使用api.update()方法时,每次请求分页返回的字典中,leaderboards键会直接覆盖之前的同名键值,这是字典的更新特性导致的,因此最终只保留了最后一页的数据。
修正后的代码
import requests import math import json # 获取元数据并计算总页数 response = requests.get("https://scoresaber.com/api/leaderboards?qualified=true&withMetadata=true") initial_data = json.loads(response.text) total_items = initial_data['metadata']['total'] items_per_page = initial_data['metadata']['itemsPerPage'] total_pages = math.ceil(total_items / items_per_page) # 初始化列表存储所有leaderboards条目 all_leaderboards = [] # 遍历所有分页收集数据 for page in range(1, total_pages + 1): page_response = requests.get(f"https://scoresaber.com/api/leaderboards?qualified=true&page={page}") page_data = json.loads(page_response.text) # 将当前页的leaderboards条目追加到总列表 all_leaderboards.extend(page_data['leaderboards']) # 构建最终的合并结果 final_result = { "leaderboards": all_leaderboards, "metadata": { "total": total_items, "itemsPerPage": items_per_page, "mergedPages": total_pages } } # 输出格式化JSON print(json.dumps(final_result, indent=4))
代码说明
- 用列表
all_leaderboards累积所有分页的条目,通过extend()方法将每页的leaderboards元素逐一添加,避免字典覆盖问题。 - 最终结果保留了合并后的完整
leaderboards列表,同时保留总数据量、每页条数、合并页数等元信息。 - 拆分了元数据获取和数据收集的逻辑,代码结构更清晰,也避免了原代码中变量重复赋值的问题。
内容的提问来源于stack exchange,提问作者miitchel
相关产品推荐
相关产品推荐

