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

如何创建适配数组开头格式API响应的API类?

处理以数组开头的API响应的API类实现

要处理这种以数组为顶层结构的API响应,核心是先匹配JSON的嵌套结构定义数据模型,再在API类中完成请求发送与响应解析的封装。以下是两种主流编程语言的实现方案:

Python 实现(基于 Pydantic + Requests)

1. 定义数据模型

用Pydantic映射JSON结构,自动完成类型校验与解析:

from pydantic import BaseModel
from typing import List

# 最内层嵌套的请求项模型
class ReqItem(BaseModel):
    _id: str
    username: str
    amount: int

# API数组中每个元素的模型
class ApiResponseItem(BaseModel):
    reqList: List[ReqItem]
    _id: str
    username: str
    amount: int

# 整个API响应是ApiResponseItem的数组类型
ApiResponse = List[ApiResponseItem]

2. 封装API处理类

把请求发送、响应解析的逻辑封装到类中:

import requests

class ApiHandler:
    def __init__(self, base_url: str):
        self.base_url = base_url

    def fetch_data(self, endpoint: str) -> ApiResponse:
        response = requests.get(f"{self.base_url}/{endpoint}")
        response.raise_for_status()  # 抛出HTTP请求错误
        # 将JSON数组解析为模型列表
        return [ApiResponseItem(**item) for item in response.json()]

使用示例

# 初始化API处理器
api = ApiHandler("https://your-api-domain.com")
# 获取并解析数据
data = api.fetch_data("target-endpoint")

# 访问解析后的数据
for item in data:
    print(f"用户名: {item.username}, 总金额: {item.amount}")
    for req_item in item.reqList:
        print(f"子请求项: {req_item.username} - {req_item.amount}")

Java 实现(基于 Jackson + OkHttp)

1. 定义POJO数据类

用Jackson注解匹配JSON字段:

import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

// 最内层嵌套的请求项
class ReqItem {
    @JsonProperty("_id")
    private String id;
    private String username;
    private int amount;

    // Getter & Setter 方法
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public int getAmount() { return amount; }
    public void setAmount(int amount) { this.amount = amount; }
}

// API数组中的单个元素类
class ApiResponseItem {
    private List<ReqItem> reqList;
    @JsonProperty("_id")
    private String id;
    private String username;
    private int amount;

    // Getter & Setter 方法
    public List<ReqItem> getReqList() { return reqList; }
    public void setReqList(List<ReqItem> reqList) { this.reqList = reqList; }
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public int getAmount() { return amount; }
    public void setAmount(int amount) { this.amount = amount; }
}

2. 封装API处理类

用OkHttp发送请求,Jackson解析JSON数组:

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
import java.util.List;

public class ApiHandler {
    private final String baseUrl;
    private final OkHttpClient client;
    private final ObjectMapper objectMapper;

    public ApiHandler(String baseUrl) {
        this.baseUrl = baseUrl;
        this.client = new OkHttpClient();
        this.objectMapper = new ObjectMapper();
    }

    public List<ApiResponseItem> fetchData(String endpoint) throws IOException {
        Request request = new Request.Builder()
                .url(baseUrl + "/" + endpoint)
                .build();

        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) throw new IOException("请求失败: " + response);
            // 解析JSON数组为List<ApiResponseItem>
            return objectMapper.readValue(
                    response.body().string(),
                    new TypeReference<List<ApiResponseItem>>() {}
            );
        }
    }
}

使用示例

public class Main {
    public static void main(String[] args) {
        ApiHandler api = new ApiHandler("https://your-api-domain.com");
        try {
            List<ApiResponseItem> data = api.fetchData("target-endpoint");
            for (ApiResponseItem item : data) {
                System.out.println("用户名: " + item.getUsername() + ", 总金额: " + item.getAmount());
                for (ReqItem req : item.getReqList()) {
                    System.out.println("子请求项: " + req.getUsername() + " - " + req.getAmount());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

核心注意事项

  • 从最内层嵌套结构开始定义模型,确保每个字段的名称、类型与JSON完全匹配;
  • 解析顶层数组时,要指定为模型类的数组/列表类型,而非单个模型对象;
  • 在API类中统一处理HTTP错误、解析异常,减少业务代码中的重复逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:52:35