当前位置: 首页 > 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.lqws.cn/news/463843.html

相关文章:

  • 神经网络中的均方误差(Mean Squared Error)详解
  • 自定义OceanBase集群安装并使用OCP接管集群
  • 【DCS开源项目】—— Lua 如何调用 DLL、DLL 与 DCS World 的交互
  • LeetCode第279题_完全平方数
  • Vue3 的生命周期:从 Composition API 视角看
  • DeepEP开源MoE模型分布式通信库
  • Linux运维新人自用笔记(Ubuntu磁盘命名规则、新磁盘分区、主流文件系统类型、mkfs命令格式化文件系统、临时和永久挂载、挂载报错、dd指令)
  • 2.7 Python方法调用机制解析:从描述符到字节码执行
  • 5.2 Qt Creator 使用FFmpeg库
  • win环境使用openssl创建p12证书
  • 微前端MFE:(React 与 Angular)框架之间的通信方式
  • word-spacing 属性
  • Kubernetes控制平面组件:Kubelet详解(八):容器存储接口 CSI
  • C++链表的虚拟头节点
  • 课程目录:腾讯混元3D × Unity3D全流程开发
  • Python pytesseract【OCR引擎库】 简介
  • 【JVM|内存结构】第一天
  • 【论文笔记】【强化微调】TinyLLaVA-Video-R1:小参数模型也能视频推理
  • Spring-MyBatis基本操作
  • linux weston flutter remote desktop
  • 2025年- H83-Lc191--139.单词拆分(动态规划)--Java版
  • JF - 600MT称重变送器与Modbus TCP转Profibus DP网关通讯案例
  • MCPServer编程与CLINE配置调用MCP
  • 项目练习:Jaspersoft Studio制作PDF报表时,detail和column footer之间存在很大的空白区
  • SkyWalking探针技术监控Spring Boot微服务——部署与应用详解
  • Laravel 项目中图片上传后无法访问的问题
  • 进程间通信——管道
  • 【Qt开发】网络运用
  • “氢键本征型材料 + 柔性电容应变片”方案分析
  • NW849NX721美光固态闪存NX745NX751