如何使用Java中的Google GSON库合并两个JSON文件
Java使用Google Gson合并两个JSON数组文件教程
前置准备
- 确保项目已引入Gson库,Maven项目可直接在
pom.xml中添加如下依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 可替换为最新稳定版本 --> </dependency>
实现步骤
1. 定义和JSON字段匹配的实体类
Gson反序列化需要和JSON结构对应的实体类,这里JSON数组的元素包含name、age、city三个字段,对应实体类如下:
public class User { private String name; private Integer age; private String city; // Gson反序列化必须保留无参构造方法 public User() {} // 以下为Getter和Setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
2. 编写合并逻辑核心代码
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Type; import java.util.List; public class MergeJsonDemo { public static void main(String[] args) { Gson gson = new Gson(); // 定义List<User>的类型,用于Gson反序列化识别泛型 Type userListType = new TypeToken<List<User>>(){}.getType(); try ( // 读取两个源JSON文件 FileReader file1Reader = new FileReader("file1.json"); FileReader file2Reader = new FileReader("file2.json"); // 定义合并后文件的输出流 FileWriter mergedWriter = new FileWriter("merged.json") ) { // 将两个JSON文件反序列化为List集合 List<User> list1 = gson.fromJson(file1Reader, userListType); List<User> list2 = gson.fromJson(file2Reader, userListType); // 合并两个集合 list1.addAll(list2); // 若需要去重可在此处添加逻辑,比如按用户名去重,需要先给User类重写equals和hashCode方法 // list1 = list1.stream().distinct().toList(); // 序列化合并后的集合为JSON,写入文件,setPrettyPrinting为格式化输出,不需要可删除 gson.newBuilder().setPrettyPrinting().create().toJson(list1, mergedWriter); System.out.println("合并完成,已生成merged.json文件"); } catch (IOException e) { e.printStackTrace(); } } }
注意事项
- 代码使用了try-with-resources语法,会自动关闭流资源,无需手动释放
- 如果你的JSON根结构不是数组而是普通对象,需要调整反序列化的目标类型,不要直接使用List
- 上述代码默认保留所有元素,有过滤、去重需求可自行在合并后添加对应逻辑
内容的提问来源于stack exchange,提问作者Huidrom Punendrajit Singh
相关产品推荐
相关产品推荐

