求助:使用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里有
&,这是HTML转义后的字符,实际请求返回的JSON应该是&,如果你的响应字符串里还是&,可以先替换成&再解析。 - 检查是否有字段名拼写错误:比如实体类里的
address1和JSON里的address1完全一致,没问题,但要注意大小写(Gson默认是大小写敏感的)。 - 打印解析后的对象:可以用
System.out.println(gson.toJson(addressList)),把解析后的对象再转成JSON,对比原JSON看看哪个层级没解析到值,定位问题。
内容的提问来源于stack exchange,提问作者user1137387
相关产品推荐
相关产品推荐

