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

如何在Java中从API响应提取address1信息?

提取JSON响应中address1字段的解决思路

针对你需要从API返回的JSON中提取address1的需求,以下是几种适合Java新手的实用方案:

方案1:使用Java原生JSON工具(JDK 11+)

JDK 11及以上版本自带了JSON解析API,无需额外引入依赖,适合快速验证:

import javax.json.Json;
import javax.json.JsonObject;
import java.io.StringReader;

public class NativeJsonParse {
    public static void main(String[] args) {
        String apiResponse = "{\"data\":{\"52WeekChange\":-0.23800159,\"SandP52WeekChange\":-0.0445475,\"address1\":\"Salesforce Tower\"}}";
        
        // 解析JSON字符串为JsonObject
        JsonObject rootObj = Json.createReader(new StringReader(apiResponse)).readObject();
        // 逐层获取嵌套字段
        String address1 = rootObj.getJsonObject("data").getString("address1");
        
        System.out.println(address1); // 输出:Salesforce Tower
    }
}

方案2:使用Gson库(Google出品,上手简单)

Gson是Google开源的轻量JSON库,语法简洁,适合新手快速上手。首先需要在项目中引入Gson依赖(Maven/Gradle均可),然后用两种方式解析:

方式A:直接解析JSON节点

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class GsonNodeParse {
    public static void main(String[] args) {
        String apiResponse = "{\"data\":{\"52WeekChange\":-0.23800159,\"SandP52WeekChange\":-0.0445475,\"address1\":\"Salesforce Tower\"}}";
        
        JsonObject rootNode = JsonParser.parseString(apiResponse).getAsJsonObject();
        String address1 = rootNode.getAsJsonObject("data").get("address1").getAsString();
        
        System.out.println(address1);
    }
}

方式B:实体类映射(更优雅,适合复杂JSON)

如果后续需要提取更多字段,定义实体类映射整个JSON结构会更易维护,注意用@SerializedName处理特殊字段名(比如以数字开头的52WeekChange):

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

// 映射API响应的实体类
class ApiResponse {
    private Data data;
    public Data getData() { return data; }

    // 嵌套的data对象实体类
    public static class Data {
        @SerializedName("52WeekChange") // 映射JSON中的特殊字段名
        private double weekChange52;
        private double SandP52WeekChange;
        private String address1;
        
        public String getAddress1() { return address1; }
    }
}

public class GsonEntityParse {
    public static void main(String[] args) {
        String apiResponse = "{\"data\":{\"52WeekChange\":-0.23800159,\"SandP52WeekChange\":-0.0445475,\"address1\":\"Salesforce Tower\"}}";
        
        ApiResponse response = new Gson().fromJson(apiResponse, ApiResponse.class);
        String address1 = response.getData().getAddress1();
        
        System.out.println(address1);
    }
}

方案3:使用Jackson库(Spring生态主流选择)

Jackson是Java生态中应用最广泛的JSON库,Spring框架默认使用它。同样先引入依赖,然后解析:

方式A:直接解析JSON节点

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonNodeParse {
    public static void main(String[] args) throws Exception {
        String apiResponse = "{\"data\":{\"52WeekChange\":-0.23800159,\"SandP52WeekChange\":-0.0445475,\"address1\":\"Salesforce Tower\"}}";
        
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode = mapper.readTree(apiResponse);
        // path()方法会自动处理字段不存在的情况,避免空指针
        String address1 = rootNode.path("data").path("address1").asText();
        
        System.out.println(address1);
    }
}

方式B:实体类映射

用@JsonProperty注解处理特殊字段名,逻辑和Gson类似:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

class ApiResponseJackson {
    private DataJackson data;
    public DataJackson getData() { return data; }

    public static class DataJackson {
        @JsonProperty("52WeekChange")
        private double weekChange52;
        private double SandP52WeekChange;
        private String address1;
        
        public String getAddress1() { return address1; }
    }
}

public class JacksonEntityParse {
    public static void main(String[] args) throws Exception {
        String apiResponse = "{\"data\":{\"52WeekChange\":-0.23800159,\"SandP52WeekChange\":-0.0445475,\"address1\":\"Salesforce Tower\"}}";
        
        ApiResponseJackson response = new ObjectMapper().readValue(apiResponse, ApiResponseJackson.class);
        String address1 = response.getData().getAddress1();
        
        System.out.println(address1);
    }
}

关键注意事项

  • 确保API返回的是合法完整的JSON,如果你的响应中有.....省略部分,要保证最终拿到的JSON结构闭合且格式正确,否则解析会抛出异常。
  • 对于JSON中特殊命名的字段(比如数字开头、含特殊字符),必须用注解映射到合法的Java变量名。
  • 新手优先推荐Gson,语法更简洁;如果后续会接触Spring框架,提前熟悉Jackson会更有帮助。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:54:15