如何使用Python将API返回的多个JSON响应合并写入单个JSON文件
解决方案
方案1:导出为标准JSON数组(适合中小数据量,符合通用JSON规范)
你现有代码已经完成了接口响应拉取、存入列表的逻辑,仅缺请求异常校验和序列化写入文件的步骤即可实现需求,完整代码如下:
import requests import json from requests.auth import HTTPBasicAuth # 按需补充你的配置参数 url = "你的API请求地址" user = "登录用户名" password = "登录密码" headers = {} # 接口要求的请求头 account_number=['sds','sdadf','rewer'] data_list=[] for i in account_number: data = {"accountNumber" : i } try: pull = requests.post( url, auth=HTTPBasicAuth(user.strip(),password), json=data, headers=headers, timeout=10 # 新增超时配置,避免请求无限挂起 ) pull.raise_for_status() # 接口返回4xx/5xx状态码时直接抛出异常,方便排查问题 output = pull.json() # requests内置json解析方法,无需手动调用json.loads data_list.append(output) except Exception as e: print(f"账号{i}数据拉取失败,错误信息:{e}") continue # 单个账号拉取失败不中断整体流程 # 一次性将完整列表写入标准JSON文件 with open("api_result.json", "w", encoding="utf-8") as f: json.dump( data_list, f, ensure_ascii=False, # 保留中文等非ASCII字符,避免乱码 indent=2 # 新增缩进格式化,提升文件可读性 )
该方案生成的是标准JSON数组结构,所有JSON解析工具都可以直接读取,缺点是所有数据会暂存在内存中,不适合超大数据量场景。
方案2:导出为JSON Lines格式(适合大数据量,内存占用极低)
如果账号量级极大、单条接口返回数据量很高,内存无法承载全量数据,可以使用逐行追加的JSON Lines格式,无需把所有数据攒在内存中:
import requests import json from requests.auth import HTTPBasicAuth # 配置参数同上 account_number=['sds','sdadf','rewer'] # 提前打开文件,拉取一条写入一条 with open("api_result.jsonl", "w", encoding="utf-8") as f: for i in account_number: data = {"accountNumber" : i } try: pull = requests.post( url, auth=HTTPBasicAuth(user.strip(),password), json=data, headers=headers, timeout=10 ) pull.raise_for_status() output = pull.json() # 单个JSON对象序列化后写入一行,末尾加换行符 f.write(json.dumps(output, ensure_ascii=False) + "\n") except Exception as e: print(f"账号{i}数据拉取失败,错误信息:{e}") continue
该方案内存占用极低,支持百万级以上数据量存储,读取时逐行解析即可,Python pandas库的read_json方法指定lines=True参数可直接读取该格式文件。
内容的提问来源于stack exchange,提问作者Datavizard
相关产品推荐
相关产品推荐

