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

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();
        }
    }
}

常见问题排查

  1. JSON格式不合法:先确认你的JSON是完整闭合的,任何语法错误都会导致GSON解析失败。
  2. 字段名大小写不匹配:GSON默认严格匹配字段名和JSON键名,比如SKU不能写成sku,wherehouse3不能写错拼写。
  3. 数据类型不兼容:data数组里的数字混合了整数和浮点数,必须用List<Double>而不是List<Integer>,否则会抛出类型转换异常。
  4. 缺少无参构造函数:GSON需要POJO类有公开的无参构造函数,如果jsonschema2pojo没生成,手动添加即可。
  5. 依赖未正确引入:确保你的项目中已经添加了GSON依赖,比如Maven依赖:
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

如果按照上面的步骤操作,应该就能成功解析了。如果还是有问题,可以捕获JsonSyntaxException并打印堆栈信息,这样能精准定位错误点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:26:19