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

使用Java/GSON解析MusicBrainz无括号无逗号分隔的大JSON报错如何解决

问题原因

你要解析的是拼接式JSON格式(又称NDJSON/JSON Lines),文件由多个独立JSON对象直接拼接组成,无外层数组括号、对象间无逗号分隔。你的代码调用了jsonReader.beginArray()要求解析数组起始符[,但文件首个有效字符是对象起始符{,因此触发类型不匹配异常。

适配方案

直接使用Gson原生流式解析的宽松模式即可完美适配,无需提前修改源文件,全程流式处理内存占用极低,适配10GB级大文件场景。

修改后代码

try(JsonReader jsonReader = new JsonReader(
    new InputStreamReader(
            new FileInputStream(jsonFilePath), StandardCharsets.UTF_8))) {
    Gson gson = new GsonBuilder().create();
    // 开启宽松解析模式,支持多JSON对象拼接的非标准格式
    jsonReader.setLenient(true);
    // 直接循环读取每个独立的Artist对象,无需数组操作
    while (jsonReader.hasNext()) {
        Artist mapped = gson.fromJson(jsonReader, Artist.class);
        // 此处编写你的业务处理逻辑
    }
} catch (IOException e) {
    e.printStackTrace();
}

核心修改说明

  • 移除jsonReader.beginArray()、jsonReader.endArray()调用:源文件无数组结构,不需要做数组校验。
  • 添加jsonReader.setLenient(true):关闭严格JSON校验,允许Gson在读取完一个JSON对象后继续读取后续的其他对象,不会提前抛出EOF异常。
其他注意事项

不建议自行按行分割JSON对象再解析,因为单个JSON对象可能跨多行,自行分割容易出现结构错误,Gson原生流式解析会自动处理JSON结构识别,可靠性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:00