Java商店程序无法读取JSON库存并打印问题求助
Java JSON库存加载问题排查
常见问题及排查步骤
1. JSON文件路径错误
- 确认FileService中读取的JSON文件路径是否正确。相对路径需注意项目工作目录(IDE中为项目根目录,打包后为Jar所在目录)。
- 可在读取前打印文件绝对路径验证:
System.out.println(new File("inventory.json").getAbsolutePath());,检查文件是否存在。
2. JSON格式与实体类不匹配
- 核对JSON字段名、数据类型是否和库存实体类完全一致(包括大小写),数组/对象结构是否符合预期。例如正确的库存JSON数组格式:
[ {"id":1,"name":"Apple","price":5.99,"stock":100}, {"id":2,"name":"Banana","price":3.49,"stock":200} ]
- 确认解析库(Jackson/Gson等)配置是否正确:比如Jackson需确保私有字段可被解析,可添加配置:
ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
3. FileService未正确返回解析数据
- 检查加载方法是否存在空指针、数据被意外清空的情况,解析完成后打印列表大小验证:
System.out.println("Loaded inventory size: " + inventoryList.size());。
4. 实体类toString()方法缺失或错误
- 若手动添加的库存能正常打印,JSON加载的不行,大概率是解析出的对象未重写
toString(),导致打印默认哈希值。需确保实体类重写该方法:
@Override public String toString() { return "Product{" + "id=" + id + ", name='" + name + '\'' + ", price=" + price + ", stock=" + stock + '}'; }
5. 异常被静默捕获
- 检查FileService中是否捕获了IO/JSON解析异常但未输出信息,导致错误被隐藏。修改异常处理逻辑:
try { // 读取解析逻辑 } catch (IOException | JsonProcessingException e) { e.printStackTrace(); }
调试建议
- 在FileService加载方法中逐步骤打印:文件存在性、读取到的JSON字符串、解析后的列表内容。
- 对比手动添加对象与JSON解析对象的属性值,确认数据一致性。
- 验证JSON文件编码为UTF-8,避免乱码导致解析失败。
内容的提问来源于stack exchange,提问作者Mitchell
相关产品推荐
相关产品推荐

