使用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
相关产品推荐
相关产品推荐

