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

Java中合并两个含相同键的JSONArray的实现方法

Java合并两个JSON payload中的Students数组

完全可行,你可以借助Java常用的JSON处理库(如Jackson、Gson)结合集合类实现这个需求,下面是几种实用方案:

方案一:直接操作JSON数组(Jackson库)

Jackson是Java生态中广泛使用的JSON处理工具,可直接解析JSON并操作数组元素:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;

public class JsonMergeExample {
    public static void main(String[] args) throws Exception {
        // 两个原始JSON字符串
        String json1 = "{\"data\":{\"Students\":[{\"name\":\"Alice\",\"div\":\"A\",\"maths\":56,\"science\":89},{\"name\":\"Bob\",\"div\":\"B\",\"maths\":87,\"science\":34}]}}";
        String json2 = "{\"data\":{\"Students\":[{\"name\":\"Charlie\",\"div\":\"C\",\"maths\":45,\"science\":67},{\"name\":\"Doe\",\"div\":\"D\",\"maths\":56,\"science\":78}]}}";

        ObjectMapper mapper = new ObjectMapper();
        // 解析JSON为JsonNode节点
        JsonNode root1 = mapper.readTree(json1);
        JsonNode root2 = mapper.readTree(json2);

        // 获取两个Students数组
        ArrayNode students1 = (ArrayNode) root1.path("data").path("Students");
        ArrayNode students2 = (ArrayNode) root2.path("data").path("Students");

        // 将第二个数组的所有元素追加到第一个数组
        students1.addAll(students2);

        // 生成格式化后的合并结果
        String mergedJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root1);
        System.out.println(mergedJson);
    }
}

方案二:实体类+List集合(更易维护)

如果JSON结构固定,可先定义对应实体类,将JSON转成List<Student>集合后合并,这种方式可读性和扩展性更强:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;

// 学生实体类
class Student {
    private String name;
    private String div;
    private int maths;
    private int science;

    // 生成getter、setter和无参构造方法
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getDiv() { return div; }
    public void setDiv(String div) { this.div = div; }
    public int getMaths() { return maths; }
    public void setMaths(int maths) { this.maths = maths; }
    public int getScience() { return science; }
    public void setScience(int science) { this.science = science; }
}

// 包装data层的类
class DataWrapper {
    private List<Student> Students;

    public List<Student> getStudents() { return Students; }
    public void setStudents(List<Student> students) { Students = students; }
}

// 最外层根类
class RootWrapper {
    private DataWrapper data;

    public DataWrapper getData() { return data; }
    public void setData(DataWrapper data) { this.data = data; }
}

public class JsonMergeWithEntity {
    public static void main(String[] args) throws Exception {
        String json1 = "{\"data\":{\"Students\":[{\"name\":\"Alice\",\"div\":\"A\",\"maths\":56,\"science\":89},{\"name\":\"Bob\",\"div\":\"B\",\"maths\":87,\"science\":34}]}}";
        String json2 = "{\"data\":{\"Students\":[{\"name\":\"Charlie\",\"div\":\"C\",\"maths\":45,\"science\":67},{\"name\":\"Doe\",\"div\":\"D\",\"maths\":56,\"science\":78}]}}";

        ObjectMapper mapper = new ObjectMapper();
        // 解析JSON为实体类对象
        RootWrapper root1 = mapper.readValue(json1, RootWrapper.class);
        RootWrapper root2 = mapper.readValue(json2, RootWrapper.class);

        // 合并Students集合
        List<Student> mergedStudents = new ArrayList<>(root1.getData().getStudents());
        mergedStudents.addAll(root2.getData().getStudents());
        root1.getData().setStudents(mergedStudents);

        // 生成合并后的JSON
        String mergedJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root1);
        System.out.println(mergedJson);
    }
}

方案三:使用Gson库实现

若习惯用Gson,可采用类似思路操作JSON数组:

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class GsonMergeExample {
    public static void main(String[] args) {
        String json1 = "{\"data\":{\"Students\":[{\"name\":\"Alice\",\"div\":\"A\",\"maths\":56,\"science\":89},{\"name\":\"Bob\",\"div\":\"B\",\"maths\":87,\"science\":34}]}}";
        String json2 = "{\"data\":{\"Students\":[{\"name\":\"Charlie\",\"div\":\"C\",\"maths\":45,\"science\":67},{\"name\":\"Doe\",\"div\":\"D\",\"maths\":56,\"science\":78}]}}";

        // 解析JSON为JsonObject
        JsonObject root1 = JsonParser.parseString(json1).getAsJsonObject();
        JsonObject root2 = JsonParser.parseString(json2).getAsJsonObject();

        // 获取两个Students数组
        JsonArray students1 = root1.getAsJsonObject("data").getAsJsonArray("Students");
        JsonArray students2 = root2.getAsJsonObject("data").getAsJsonArray("Students");

        // 遍历第二个数组,将元素添加到第一个数组
        for (int i = 0; i < students2.size(); i++) {
            students1.add(students2.get(i));
        }

        // 输出合并结果
        System.out.println(root1.toString());
    }
}

关于集合类的说明

Java中的ArrayList、LinkedList等List实现类,可通过addAll()方法快速合并两个集合,操作高效。而JSON库提供的ArrayNode(Jackson)或JsonArray(Gson),本身也内置了元素添加的方法,底层逻辑同样基于集合实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:02:34