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

多API调用结果合并为单个JSON对象及TypeError问题排查

解决API多请求结果合并及TypeError问题

首先,咱们先搞清楚你遇到的TypeError原因:response_list是一个Python列表,列表只能用整数索引(比如response_list[0]取第一个元素)或者切片,你用字符串"meta"去索引肯定会报错。每个API返回的JSON对象是存在列表的每个元素里的,所以要访问meta得遍历列表里的每个字典元素才行。

接下来,咱们说说如何把多个请求的JSON结果合并成一个完整的JSON对象。假设你的每个API响应结构是这样的(从你给出的示例来看):

{
  "meta": {"cost": 1, "dailyQuota": 50, "start": "...", "end": "...", ...},
  "data": [/*10天的气象数据条目*/]
}

我们的目标是把所有响应里的data合并成一个大列表,同时把meta信息做汇总(比如总请求成本、总请求次数,以及整体的时间范围)。下面是修正后的完整代码:

import requests
import pyarrow as arrow
import json

response_list = []
# 注意:这里假设dates是你已经定义好的起始日期列表
for date in dates:
    start = arrow.get(date)
    # 把arrow日期对象转成API能识别的字符串格式
    start_str = start.format('YYYY-MM-DD HH:mm')
    end_str = start.shift(days=10).format('YYYY-MM-DD HH:mm')
    
    response = requests.get(
        'https://your-api-url',  # 替换成你的实际API地址
        params={
            'foo': 'bar',  # 修正语法:键值对要用引号,且逗号分隔
            'start': start_str,
            'end': end_str
        },
        headers={
            'Authorization': api_key
        }
    )
    # 建议加个状态码检查,避免无效数据加入列表
    if response.status_code == 200:
        response_list.append(response.json())
    else:
        print(f"请求失败,日期:{date},状态码:{response.status_code}")

# 开始合并结果
merged_json = {
    "meta": {},
    "data": []
}

# 1. 合并所有气象数据
for res in response_list:
    # 用extend把每个响应的data列表合并到总列表里
    merged_json["data"].extend(res.get("data", []))

# 2. 汇总元数据(根据你的需求调整)
if response_list:
    # 取第一个响应的基础元数据(比如lat、lng、dailyQuota这些不变的字段)
    base_meta = response_list[0]["meta"].copy()
    
    # 计算汇总值:总花费、总请求次数
    total_cost = sum(res["meta"]["cost"] for res in response_list)
    total_requests = sum(res["meta"]["requestCount"] for res in response_list)
    
    # 确定整体的时间范围:最早的start和最晚的end
    overall_start = min(res["meta"]["start"] for res in response_list)
    overall_end = max(res["meta"]["end"] for res in response_list)
    
    # 更新合并后的元数据
    merged_json["meta"] = {
        **base_meta,
        "totalCost": total_cost,
        "totalRequestCount": total_requests,
        "overallStart": overall_start,
        "overallEnd": overall_end
    }

# 现在可以正常访问合并后的meta了
print(merged_json["meta"])
# 保存为单个JSON文件
with open("merged_weather_data.json", "w") as f:
    json.dump(merged_json, f, indent=2)

关键细节说明:

  • 修正了你原代码里的语法错误:params里的键值对需要用引号,且参数之间要有逗号分隔;同时把Arrow日期对象转换成字符串格式,确保API能正确解析。
  • 加入了请求状态码检查,避免把失败的响应数据加入列表。
  • 合并data时用extend而不是append,这样不会把每个响应的data列表当成单个元素加入,而是把所有条目平铺到总列表里。
  • 元数据汇总部分保留了不变的字段(比如经纬度),同时添加了汇总统计项,你可以根据自己的需求调整这部分逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:52