Android Volley结合GSON无法将JSON数据映射到POJO类
解决GSON解析JSON到POJO的问题
看起来你在GSON解析JSON时遇到了麻烦,虽然用jsonschema2pojo生成了POJO但还是没成功,我来帮你排查问题并给出可行的方案。
首先,先确认你的JSON数据是完整合法的——你给出的JSON末尾没有闭合,data数组和wherehouse3对象都缺少结束符号,这会直接导致解析失败。先假设完整的JSON结构如下:
{ "SKU": [ "Hydrangea White( F033 )", "Pink Rose 50 cm( F075 )", "Yellow Rose 50 cm( F074 )", "White Rose 50 cm( F072 )" ], "wherehouse3": { "name": "New Jersey", "data": [ 20, 14.583333333333, 13.541666666667 ] } }
第一步:检查并修正POJO类
可能jsonschema2pojo生成的POJO存在字段名不匹配、数据类型错误的问题,这里给出完全匹配的POJO:
1. 根实体类 Inventory.java
import java.util.List; public class Inventory { // 注意字段名要和JSON中的键完全一致(大小写敏感) private List<String> SKU; private Wherehouse3 wherehouse3; // GSON需要无参构造函数,手动添加确保解析正常 public Inventory() {} // Getter和Setter方法 public List<String> getSKU() { return SKU; } public void setSKU(List<String> SKU) { this.SKU = SKU; } public Wherehouse3 getWherehouse3() { return wherehouse3; } public void setWherehouse3(Wherehouse3 wherehouse3) { this.wherehouse3 = wherehouse3; } }
2. 仓库实体类 Wherehouse3.java
import java.util.List; public class Wherehouse3 { private String name; // data数组包含整数和浮点数,用List<Double>兼容两种类型 private List<Double> data; public Wherehouse3() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Double> getData() { return data; } public void setData(List<Double> data) { this.data = data; } }
第二步:正确的GSON解析代码
确保你的解析代码正确调用GSON的fromJson方法,示例如下:
import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; public class JsonParserDemo { public static void main(String[] args) { String json = "{\n" + " \"SKU\": [\n" + " \"Hydrangea White( F033 )\",\n" + " \"Pink Rose 50 cm( F075 )\",\n" + " \"Yellow Rose 50 cm( F074 )\",\n" + " \"White Rose 50 cm( F072 )\"\n" + " ],\n" + " \"wherehouse3\": {\n" + " \"name\": \"New Jersey\",\n" + " \"data\": [ 20, 14.583333333333, 13.541666666667 ]\n" + " }\n" + "}"; Gson gson = new Gson(); try { Inventory inventory = gson.fromJson(json, Inventory.class); // 验证解析结果 System.out.println("解析到的SKU列表:" + inventory.getSKU()); System.out.println("仓库名称:" + inventory.getWherehouse3().getName()); System.out.println("仓库数据:" + inventory.getWherehouse3().getData()); } catch (JsonSyntaxException e) { // 捕获异常并打印,方便排查问题 System.err.println("解析失败,错误信息:"); e.printStackTrace(); } } }
常见问题排查
- JSON格式不合法:先确认你的JSON是完整闭合的,任何语法错误都会导致GSON解析失败。
- 字段名大小写不匹配:GSON默认严格匹配字段名和JSON键名,比如
SKU不能写成sku,wherehouse3不能写错拼写。 - 数据类型不兼容:
data数组里的数字混合了整数和浮点数,必须用List<Double>而不是List<Integer>,否则会抛出类型转换异常。 - 缺少无参构造函数:GSON需要POJO类有公开的无参构造函数,如果jsonschema2pojo没生成,手动添加即可。
- 依赖未正确引入:确保你的项目中已经添加了GSON依赖,比如Maven依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
如果按照上面的步骤操作,应该就能成功解析了。如果还是有问题,可以捕获JsonSyntaxException并打印堆栈信息,这样能精准定位错误点。
内容的提问来源于stack exchange,提问作者Abhishek kumar
相关产品推荐
相关产品推荐

