循环中判断JSON是否为空并追加数据的代码问题求助
问题分析与解决方案
核心问题
你的代码存在两个关键错误,导致数据覆盖和追加异常:
- 错误1:未调用JSON解析方法:
else块中json_data.append(r.json)是将Response.json方法本身作为元素添加,而非调用该方法获取JSON数据,最终导致列表中混入方法对象。 - 错误2:判断逻辑不合理:仅当
json_data为空时直接赋值API返回结果,若API返回空列表,json_data会始终保持为空,导致后续循环持续覆盖而非追加数据。
修正后的代码
from datetime import date import pandas as pd import requests today = date.today() json_data = [] for month_start in pd.date_range('2014-01-01', today, freq='MS'): month_end = (month_start + pd.offsets.MonthEnd(1)) # 计算Unix时间戳(毫秒级) month_start_unix = (month_start - pd.Timestamp("1970-01-01")) // pd.Timedelta('1ms') month_end_unix = (month_end - pd.Timestamp("1970-01-01")) // pd.Timedelta('1ms') API_ENDPOINT = "你的API链接" # 替换为实际链接 # 向Viriciti API发送请求 r = requests.get(url=API_ENDPOINT, headers=Headers) # 错误提示语句 if r.status_code == 200: print('数据获取成功') # 获取当前请求的JSON数据(字典列表格式) current_data = r.json() # 将当前数据的元素逐一追加到总列表中 json_data.extend(current_data) # 根据是否追加了有效数据打印提示 if len(current_data) == 0: print('本次请求无数据') else: print(f'追加了{len(current_data)}条数据至JSON') else: print(f"请求出现{r.status_code}错误") print(json_data)
修正说明
- 统一使用
extend追加数据:不管json_data初始是否为空,直接用extend将API返回的列表元素合并到总列表中,避免覆盖问题。 - 正确调用
r.json()方法:必须加上括号执行方法,才能获取实际的JSON数据。 - 优化提示信息:根据当前请求返回的数据量打印对应提示,便于排查空数据的请求。
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

