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

使用IntelliJ+Maven开发Java项目,Gson加载解析JSON文件遇阻

解决Gson解析JSON数组到Vector的问题

嗨,我看你正在用Gson处理JSON数组解析到Vector的需求,目前代码只写了一半,我来帮你补全代码并梳理常见的坑点。

完整可运行的代码示例

先给你一个能直接复用的完整实现,你可以对照自己的代码调整:

public void parseSomething() {
    Gson gson = new GsonBuilder().create();
    // 注意这里要直接匹配Vector的泛型类型,而不是List
    Type vectorType = new TypeToken<Vector<MyClass>>(){}.getType();
    Vector<MyClass> something;
    
    try (Reader file = Files.newBufferedReader(Paths.get("src/main/resources/your-data.json"))) {
        // Gson会直接帮你实例化并填充Vector,不需要提前new空对象
        something = gson.fromJson(file, vectorType);
    } catch (IOException e) {
        e.printStackTrace();
        // 这里可以加自定义处理,比如日志记录或者抛出业务异常
    } catch (JsonSyntaxException e) {
        System.err.println("JSON格式不对哦:" + e.getMessage());
    }
    
    // 测试输出解析结果
    for (MyClass item : something) {
        System.out.println(item);
    }
}

几个容易踩的坑

  • 泛型类型不匹配:你原来写的是TypeToken<List<MyClass>>,但要解析到Vector的话,必须用TypeToken<Vector<MyClass>>,Gson对泛型类型的匹配是严格的。
  • 文件路径错误:开发环境下如果JSON放在resources目录里,路径可以写src/main/resources/xxx.json;打包后可以用getClass().getResourceAsStream("/xxx.json")来读取。
  • MyClass字段不匹配:如果JSON里的键名和MyClass的字段名不一样,要给字段加@SerializedName注解,比如:
    public class MyClass {
        @SerializedName("user_id")
        private Integer userId;
        // 其他字段、getter和setter
    }
    
  • Maven依赖问题:确认pom.xml里已经引入了正确的Gson依赖:
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.10.1</version> <!-- 建议用最新稳定版 -->
    </dependency>
    

小优化建议

  • 可以把Gson实例做成单例,避免每次解析都新建对象,提升性能;
  • 如果是超大JSON文件,Gson的流式解析会更节省内存,但普通大小的文件用上面的方式完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:12