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

如何用Java从REST API提取特定数据(如fdcId、description)

从REST API返回的JSON中提取特定字段(fdcId/description)

你的代码目前只是把API返回的JSON原封不动打印出来,要提取特定字段,得用JSON解析库来处理。Java里常用的有Jackson和Gson,这里用Jackson来演示,它是很多Java项目的标配。

步骤1:添加Jackson依赖

如果用Maven管理项目,在pom.xml里加入这段依赖:

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version> <!-- 可替换为最新稳定版 -->
    </dependency>
</dependencies>

如果是手动导入jar包,需要下载jackson-core、jackson-databind、jackson-annotations这三个jar文件。

步骤2:创建数据类(POJO)

创建一个简单的类来映射API返回的JSON结构,只保留你需要的字段即可:

public class Food {
    private int fdcId;
    private String description;

    // 必须保留无参构造方法,Jackson依赖它实例化对象
    public Food() {}

    // Getter方法,用于获取字段值
    public int getFdcId() {
        return fdcId;
    }

    public String getDescription() {
        return description;
    }
}

后续如果需要提取更多字段,直接在类中添加对应属性和Getter方法即可。

步骤3:修改原代码解析JSON

把原代码中打印JSON的逻辑替换为Jackson解析逻辑,提取目标字段:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://api.nal.usda.gov/fdc/v1/food/1750339?api_key=DEMO_KEY");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");
            
            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("请求失败:HTTP错误码 " + conn.getResponseCode());
            }

            // 读取完整的JSON响应字符串
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            StringBuilder jsonBuilder = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                jsonBuilder.append(line);
            }
            String jsonResponse = jsonBuilder.toString();
            br.close();
            conn.disconnect();

            // 用Jackson将JSON字符串转换为Food对象
            ObjectMapper objectMapper = new ObjectMapper();
            Food food = objectMapper.readValue(jsonResponse, Food.class);

            // 提取并打印目标字段
            System.out.println("fdcId: " + food.getFdcId());
            System.out.println("description: " + food.getDescription());

        } catch (Exception e) {
            System.out.println("请求异常:" + e);
        }
    }
}

关键说明

  • ObjectMapper是Jackson的核心类,负责完成JSON字符串到Java对象的转换(反序列化)
  • 数据类的字段名必须和JSON中的键名完全匹配,比如JSON里的fdcId对应类中的fdcId;如果字段名不一致,可以用@JsonProperty注解指定映射关系,例如@JsonProperty("fdc_id") private int fdcId;
  • 如果API返回的是数组结构,可通过objectMapper.readValue(jsonResponse, Food[].class)或者List<Food> foods = objectMapper.readValue(jsonResponse, new TypeReference<List<Food>>() {});来解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:01:01