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

循环迭代页面时如何实现JSON文件追加而非覆盖?

问题分析与修正方案

核心错误点

  • 你没有将新请求到的data合并到已有数据中,反而每次用新的data直接覆盖了文件内容。
  • my_data.update(my_data)是无效操作,只是让已有数据自我更新,完全没用到当前页的新数据。
  • 使用'w'模式打开文件会直接覆盖原有内容,而非合并后写入。
  • 首次运行时若data.json不存在,json.load会抛出文件未找到的异常。

修正后的代码

根据API返回的JSON结构不同,分两种常见情况处理:

情况1:API返回直接是数据列表

import requests
import json

# 初始化总数据:读取已有文件,不存在则为空列表
try:
    with open("data.json", 'r') as f:
        total_data = json.load(f)
except FileNotFoundError:
    total_data = []

for i in range(4):
    # 用f-string拼接URL更简洁
    response = requests.post(f"https://API&page={i}")
    page_data = response.json()
    # 将当前页数据追加到总数据
    total_data.extend(page_data)

# 一次性写入合并后的数据
with open("data.json", 'w') as f:
    json.dump(total_data, f, indent=2)

情况2:API返回字典,数据在指定字段下(比如results)

如果API返回的是类似{"page": 1, "results": [数据1, 数据2]}的结构,需要针对具体字段合并:

import requests
import json

# 初始化总数据结构
try:
    with open("data.json", 'r') as f:
        total_data = json.load(f)
    # 确保存储数据的字段存在
    if 'results' not in total_data:
        total_data['results'] = []
except FileNotFoundError:
    total_data = {'results': []}

for i in range(4):
    response = requests.post(f"https://API&page={i}")
    page_data = response.json()
    # 追加当前页的目标字段数据
    total_data['results'].extend(page_data['results'])

with open("data.json", 'w') as f:
    json.dump(total_data, f, indent=2)

额外说明

  • 用with语句操作文件会自动处理关闭,避免资源泄漏。
  • 将文件读取放在循环外,减少重复IO操作,提升效率。
  • 若API返回的JSON结构更复杂,需根据实际结构调整合并逻辑,确保是将新页面的有效数据追加到总数据中,而非覆盖整个结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:31:45