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

