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

使用Gson读写JSON文件时出现JSON Malformed Exception报错是什么原因?

问题根因
  • JSON格式不符合语法规范
    你生成的JSON文件存在多个顶层根元素,三个独立的数组并列不符合JSON语法要求,JSON规定整个文档只能有一个顶层对象/数组,这是触发JSON malformed错误的直接原因。
  • 写入逻辑错误
    你使用了追加模式(FileWriter第二个参数设为true)写入数据,每次新增用户时直接将单个用户的序列化内容拼到文件末尾,没有维护整个JSON数组的结构,最终形成了多数组拼接的非法格式。
修复方案

调整写入逻辑,不要直接追加内容:

  1. 每次新增用户前,先读取文件中已有的全部用户数据,反序列化为User列表
  2. 将新用户添加到该列表中
  3. 把更新后的完整列表序列化为JSON,覆盖写入原文件,不要用追加模式

修复后的写入代码示例

Gson gsonObject = new Gson();
List<User> userList = new ArrayList<>();
File userFile = new File("users.json");

// 读取已有用户数据
if (userFile.exists() && userFile.length() > 0) {
    try (BufferedReader reader = new BufferedReader(new FileReader(userFile))) {
        User[] existUsers = gsonObject.fromJson(reader, User[].class);
        userList.addAll(Arrays.asList(existUsers));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

// 添加新用户
userList.add(writerUser);

// 覆盖写入全量用户数据
try (FileWriter writerFile = new FileWriter(userFile)) {
    writerFile.write(gsonObject.toJson(userList));
} catch (IOException e) {
    e.printStackTrace();
}

修改后生成的JSON为合法的单数组格式,你现有的读取代码可直接正常运行:

[{"name":"james","idCode":1},{"name":"kyle","idCode":2},{"name":"test","idCode":3}]

额外优化建议:使用try-with-resources语法管理文件流,可自动关闭资源,避免异常场景下的资源泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:48:02