如何使用Gson解析ndJson中的多条记录

来源:Vuejs社区作者:芒果头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何使用Gson解析ndJson中的多条记录》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用Gson解析ndJson中的多条记录》有用,将其分享出去将是对创作者最好的鼓励。

ndJson(换行分隔的JSON)把多个JSON对象按行存放,每一行都是一个独立且完整的JSON。使用Gson解析这种格式时,最好的方式是借助JsonReader按流读取,而不是把整个文件读成字符串再拆分。这样可以处理非常大的数据文件而不会因为内存占用过高导致程序崩溃。

如何使用Gson解析ndJson中的多条记录

引入Gson依赖

在Java项目中使用Gson,首先需要在构建工具里添加依赖。以Maven为例,添加如下内容:

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.10.1</version>
</dependency>

定义数据实体类

假设ndJson里每一行都是一个用户记录,我们可以定义对应的Java类:

public class User {
  private String name;
  private int age;

  // Getter和Setter
  public String getName() { return name; }
  public void setName(String name) { this.name = name; }
  public int getAge() { return age; }
  public void setAge(int age) { this.age = age; }
}

使用JsonReader解析多条记录

Gson提供了JsonReader,可以基于Reader逐条解析。下面示例从文件读取ndJson并转为User对象列表:

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class NdJsonParser {
  public static List<User> parse(String filePath) throws Exception {
    Gson gson = new Gson();
    List<User> users = new ArrayList<>();
    // 创建JsonReader,逐行读取ndJson
    try (JsonReader reader = new JsonReader(new FileReader(filePath))) {
      reader.beginArray(); // 如果ndJson被包在数组里可去掉此行
      while (reader.hasNext()) {
        User u = gson.fromJson(reader, User.class);
        users.add(u);
      }
      reader.endArray();
    }
    return users;
  }
}

如果ndJson是纯换行分隔、没有外层数组,则不需要调用beginArray和endArray,直接循环读取即可:

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class NdJsonLineParser {
  public static List<User> parseLines(String filePath) throws Exception {
    Gson gson = new Gson();
    List<User> users = new ArrayList<>();
    try (BufferedReader br = new BufferedReader(new FileReader(filePath));
         JsonReader reader = new JsonReader(br)) {
      while (reader.peek() != null) {
        User u = gson.fromJson(reader, User.class);
        if (u != null) users.add(u);
      }
    }
    return users;
  }
}

注意事项与异常处理

  • 确保每行都是合法JSON,否则fromJson会抛出JsonSyntaxException。
  • 处理大文件时不要用readLine再解析字符串,直接用JsonReader流方式更省内存。
  • 若数据来自网络流,可将InputStream传给InputStreamReader再包装为JsonReader。
使用Gson解析ndJson的核心思路是:把输入当作JSON流,而不是当作单个大JSON文档。

小结

通过JsonReader配合Gson的fromJson方法,可以稳定高效地解析ndJson中的多条记录。这种方式既适合小文件,也能支撑大规模数据场景,是Java后端处理流式JSON的实用方案。

GsonndJsonJava_JSON修改时间:2026-07-28 12:03:19

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。