如何去除Python中JSON分页写入文件的多余方括号?
解决JSON分页数据写入时的多余方括号问题
你的问题出在每次直接把分页返回的整个数组(带[])追加写入文件,最后文件里是[...][...]这种多个数组拼在一起的非法格式,没法当成一个完整的大数组解析。给你两种可行的解决办法:
方法一:先收集所有数据再写入(适合内存足够的情况)
把每一页的数据都合并到同一个列表里,最后一次性写入成完整的JSON数组:
import requests import json all_data = [] page = 0 baseurl = "你的基础API地址" headers = {} # 替换成你的实际请求头 while True: response = requests.get(baseurl + f"&skip={page}", headers=headers) current_page_data = response.json() # 返回空数组说明没有更多数据了 if not current_page_data: break # 将当前页的所有元素追加到总列表 all_data.extend(current_page_data) page += 1000 # 一次性写入完整的大数组 with open('filepath', 'w', encoding='utf-8') as f: json.dump(all_data, f, ensure_ascii=False, indent=4)
方法二:边写边处理(适合数据量极大、内存不够的情况)
如果数据太大没法全部存到内存,就手动控制文件格式:先写大数组的开头,逐页写入单个元素,最后补全数组结尾:
import requests import json page = 0 baseurl = "你的基础API地址" headers = {} # 替换成你的实际请求头 with open('filepath', 'w', encoding='utf-8') as f: # 先写大数组的左括号 f.write('[\n') is_first_page = True while True: response = requests.get(baseurl + f"&skip={page}", headers=headers) current_page_data = response.json() if not current_page_data: break if not is_first_page: # 非第一页先写逗号,和前一页元素分隔 f.write(',\n') # 遍历当前页的每个元素,逐个写入(不带外层方括号) for index, item in enumerate(current_page_data): if index != 0: # 同一页内元素间加逗号分隔 f.write(',\n') json.dump(item, f, ensure_ascii=False, indent=4) is_first_page = False page += 1000 # 补全大数组的右括号 f.write('\n]')
两种方法都能生成合法的单个JSON大数组,你可以根据数据量大小选择对应方案。
内容的提问来源于stack exchange,提问作者ChrisD
相关产品推荐
相关产品推荐

