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

求助:使用GSON解析JSON生成的Java类获取address1与address2值

解决GSON解析获取Address中address1/address2字段的问题

你的实体类结构和返回的JSON是完全匹配的,没什么问题,大概率是解析时的层级没处理对,或者Gson的初始化细节没注意到。我给你梳理下正确的解析步骤和可能的坑:

1. 正确初始化Gson实例

因为你的实体类字段都用了@Expose注解,虽然直接new Gson()也能解析,但更规范的方式是用GsonBuilder来构建,确保注解生效:

Gson gson = new GsonBuilder()
        .excludeFieldsWithoutExposeAnnotation() // 只解析带@Expose的字段
        .create();

2. 逐层解析获取目标字段

JSON的层级是:AddressList → _embedded → address(列表)→ 单个Address对象 → address1/address2,所以要逐层获取,还要注意空指针防护:

// 假设jsonResponse是你拿到的JSON字符串
AddressList addressList = gson.fromJson(jsonResponse, AddressList.class);

// 逐层校验并获取字段
if (addressList != null && addressList.getEmbedded() != null) {
    List<Address> addressListData = addressList.getEmbedded().getAddress();
    if (addressListData != null && !addressListData.isEmpty()) {
        Address targetAddress = addressListData.get(0);
        // 这里就能拿到你要的字段了
        String addr1 = targetAddress.getAddress1();
        String addr2 = targetAddress.getAddress2();
        
        // 测试输出
        System.out.println("Address1: " + addr1);
        System.out.println("Address2: " + addr2);
    } else {
        System.out.println("地址列表为空或不存在");
    }
} else {
    System.out.println("解析后的AddressList或Embedded为空");
}

3. 排查可能的问题点

如果还是拿不到值,可以检查这几个地方:

  • 确认你的JSON字符串是原始未转义的格式:比如你给出的JSON里有&amp;,这是HTML转义后的字符,实际请求返回的JSON应该是&,如果你的响应字符串里还是&amp;,可以先替换成&再解析。
  • 检查是否有字段名拼写错误:比如实体类里的address1和JSON里的address1完全一致,没问题,但要注意大小写(Gson默认是大小写敏感的)。
  • 打印解析后的对象:可以用System.out.println(gson.toJson(addressList)),把解析后的对象再转成JSON,对比原JSON看看哪个层级没解析到值,定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:31:28