当前位置: 首页 > news >正文

java 找出两个json文件的不同之处

在这里插入代码片
package cn.test;import com.google.gson.*;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Set;public class JsonDiff {public static void main(String[] args) throws IOException {String json1 = new String(Files.readAllBytes(Paths.get("/IdeaProjects/hello/src/main/java/cn/test/json1.txt")), StandardCharsets.UTF_8);String json2 = new String(Files.readAllBytes(Paths.get("/IdeaProjects/hello/src/main/java/cn/test/json2.txt")), StandardCharsets.UTF_8);diffJsonObjects(json1, json2);}public static void diffJsonObjects(String json1, String json2) {Gson gson = new Gson();JsonParser parser = new JsonParser();JsonElement element1 = parser.parse(json1);JsonElement element2 = parser.parse(json2);diffElements("root", element1, element2);}private static void diffElements(String path, JsonElement elem1, JsonElement elem2) {if (!elem1.equals(elem2)) {if (elem1.isJsonObject() && elem2.isJsonObject()) {diffJsonObjects(path, elem1.getAsJsonObject(), elem2.getAsJsonObject());} else if (elem1.isJsonArray() && elem2.isJsonArray()) {diffJsonArrays(path, elem1.getAsJsonArray(), elem2.getAsJsonArray());} else {System.out.println("Difference at path '" + path + "': " + elem1 + " != " + elem2);}}}private static void diffJsonObjects(String path, JsonObject obj1, JsonObject obj2) {Set<Map.Entry<String, JsonElement>> entries1 = obj1.entrySet();Set<Map.Entry<String, JsonElement>> entries2 = obj2.entrySet();for (Map.Entry<String, JsonElement> entry : entries1) {String key = entry.getKey();if (!obj2.has(key)) {System.out.println("Missing in second JSON at path '" + path + "." + key + "': " + entry.getValue());} else {diffElements(path + "." + key, entry.getValue(), obj2.get(key));}}for (Map.Entry<String, JsonElement> entry : entries2) {if (!obj1.has(entry.getKey())) {System.out.println("Missing in first JSON at path '" + path + "." + entry.getKey() + "': " + entry.getValue());}}}private static void diffJsonArrays(String path, JsonArray arr1, JsonArray arr2) {// 注意:这里简化处理,仅比较数组长度和按索引比较元素,实际应用中可能需要更复杂的逻辑处理不同长度或元素顺序变化的情况。if (arr1.size() != arr2.size()) {System.out.println("Array size difference at path '" + path + "': " + arr1.size() + " != " + arr2.size());} else {for (int i = 0; i < arr1.size(); i++) {diffElements(path + "[" + i + "]", arr1.get(i), arr2.get(i));}}}
}
http://www.dtcms.com/a/256161.html

相关文章:

  • Python Day55
  • Taro 跨端开发:从调试到发布的完整指南
  • Odoo 17 Many2one字段内联编辑完整实现方案
  • Zephyr 调试实用指南:日志系统、Shell CLI 与 GDB 全面解析
  • gRPC 与 Protobuf 的深度集成 —— 从服务定义到多语言交互(Go + Java 示例)
  • 将浮点数转换为分数
  • C#测试调用ClosedXML根据批注设置excel单元格内容
  • 【舞蹈】编排:如何对齐拍子并让小节倍数随BPM递减
  • 经典控制理论:线性化笔记
  • PowerBI HtmlContent生成表格
  • 磁性传感器在电机控制闭环系统中的反馈作用
  • 【JAVA】数组的使用
  • 数据分析核心指标体系:从求和、计数到比较的全维度计算方法
  • 基于ARM ubuntu如何进行交叉编译
  • 针对机器人自修复材料的具体推荐及特性分析
  • 操作系统进程与线程核心知识全览
  • 如何定时发布WordPress文章(多种方法)
  • 日常开发常用工具和技巧以及遇到的问题
  • 闲庭信步使用SV进行图像处理系列教程介绍
  • 跟着AI学习C# Day29
  • Rabbitmq集成springboot,手动确认消息basicAck、basicNack、basicReject的使用
  • 应对进行性核上性麻痹,科学护理指南
  • 本地回环地址在广播风暴与环路排查中的实战指南
  • 简单通过SenseVoice给自己配置一个语音转文字服务
  • Django中为api自定义一些装饰器:如参数校验等
  • GeoJSON 数据简介
  • Android 终端模拟器 termux app
  • 深入Java面试:从Spring Boot到微服务
  • 【C++语法】类和对象(4)——日期类和const成员函数
  • linux安装minio并使用