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

Java读取JSON文件返回JSONObject为空触发NullPointerException求助

排查步骤

1. 定位readJSONFile返回null的根因

  • 确认文件读取路径是否正确:打印new File("films.txt").getAbsolutePath()核对实际读取的文件位置,避免运行时工作目录与预期不符导致读取到不存在的文件,方法直接返回null。
  • 检查方法内部的异常捕获逻辑:绝大多数工具类返回null都是内部吞了解析异常,你可以临时注释方法内的异常捕获逻辑,或者在catch块加堆栈打印,确认是不是JSON解析阶段抛出的EOF、NumberFormatException被捕获后直接返回了null。
  • 校验films.txt的JSON合法性:EOF错误说明解析器读到文件末尾都没有匹配到完整的JSON结构,大概率是文件内容被截断、末尾存在多余空行/非法字符、上一次写操作未正常关闭流导致内容未完全落盘。可以用本地JSON格式化工具校验文件内容,修复不完整的JSON结构、多余逗号、缺失括号等问题。

2. 修复空字符串转Float的NumberFormatException

  • 排查JSON文件中数字类型字段(如票价、评分、片长等)的取值,是否存在值为空字符串的情况,JSON解析器无法将空字符串转换为Float类型会直接抛出该异常。将空值字段替换为合法数字,或者在解析逻辑中新增空串判断,遇到空串时自动转为默认值(如0、null)再做类型转换。
  • 新增影片的前端表单增加数字类型校验,禁止空的数字字段写入JSON文件,从源头避免空串生成。

3. 新增空值兜底逻辑避免NPE

  • 调用readJSONFile后先做非空判断,文件不存在或解析失败时直接初始化新的JSONObject实例再执行写入操作,参考代码:
JSONObject films = Main.readJSONFile("films.txt");
// 空值兜底
if (films == null) {
    films = new JSONObject();
}
films.put("newFilm", newFilmInfo);
  • 每次写入JSON文件完成后,先调用输出流的flush()方法再关闭流,确保所有内容完全写入磁盘,避免下一次读取时出现结构不完整的EOF错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:03