package com.sinoeyes.pilotrun; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.ObjectUtils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class ComplateJson { /** * * @Title: compare * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param obj1 * @param @param obj2 * @param @param diffs 设定文件 * @return void 返回类型 * @throws */ @SuppressWarnings("rawtypes") public static void compare(JSONObject obj1, JSONObject obj2, List<String> diffs) { String message = "字符串差异:字段【%s】,值【%s】!=【%s】"; String lostField = "缺失字段:【%s】"; String lostJson = "json对象差异:【%s】"; Iterator iter1 = obj1.keys(); while (iter1.hasNext()) { Object key = iter1.next(); if (obj2.containsKey(key)) { Object value = obj2.get(key); if (value instanceof String) { boolean ret = ObjectUtils.notEqual(obj1.get(key), obj2.get(key)); if (ret) { diffs.add(String.format(message, key, obj1.get(key), obj2.get(key))); } } else if (value instanceof JSONArray) { JSONArray array1 = (JSONArray) obj1.get(key); JSONArray array2 = (JSONArray) obj2.get(key); for (int i = 0; i < array1.size(); i++) { JSONObject o1 = (JSONObject) array1.get(i); // 遍历obj2 boolean result = false; for (int j = 0; j < array2.size(); j++) { JSONObject o2 = (JSONObject) array2.get(j); ArrayList<String> subDiff = new ArrayList<>(); compare(o1, o2, subDiff); if (subDiff.isEmpty()) { result = true; break; } } if (!result) { diffs.add(String.format(lostJson, o1.toString())); } } } else if (value instanceof JSONObject) { JSONObject o1 = (JSONObject) obj1.get(key); JSONObject o2 = (JSONObject) obj2.get(key); compare(o1, o2, diffs); } } else { diffs.add(String.format(lostField, key)); } } } public static void main(String[] args) { try { // String path1 = "D:\\99_TEMP\\sample1.json"; // String path2 = "D:\\99_TEMP\\sample2.json"; // String path1 = "D:\\99_TEMP\\sample1 - 副本.json"; // String path2 = "D:\\99_TEMP\\sample2 - 副本.json"; String path1 = "D:\\99_TEMP\\left.json"; String path2 = "D:\\99_TEMP\\right.json"; File file1 = new File(path1); File file2 = new File(path2); String str1 = FileUtils.readFileToString(file1); String str2 = FileUtils.readFileToString(file2); JSONObject json1 = JSONObject.fromObject(str1); JSONObject json2 = JSONObject.fromObject(str2); List<String> list = new ArrayList<String>(); compare(json1, json2, list); for (String str : list) { System.out.println(str); } } catch (IOException e) { e.printStackTrace(); } } }
相关推荐
json-lib-2.2-jdk15.jar commons-beanutils.jar commons-beanutils-core-1.8.0.jar commons-collections-3.2.1.jar commons-httpclient.jar commons-lang.jar commons-logging-1.1.1.jar ezmorph-1.0.5.jar morph-...
2. **对比功能**:核心功能是对两个JSON对象进行深度比较,不仅检查键值是否相同,还会检查嵌套的对象和数组是否存在差异。 3. **高亮显示**:当发现不同之处时,工具会以醒目的方式(如颜色高亮)突出显示这些差异...
这个压缩包文件"notepad插件(json,文件比较,导出).rar"包含了一些针对Notepad++的增强功能插件,旨在提升用户在处理JSON数据、进行文件比较以及文件导出时的效率。 首先,我们来看NPPJSONViewer插件。这款插件专门...
2,对于API响应JSON数据,需要对比时使用文档中第二个工具集,可以指定忽略噪声字段,比较强大。 不废话:https://github.com/kvnxiao/jsonequals 使用至今,发现对JsonArray的顺序是必须判断的,需要自定义修改。
通过简洁的界面和高效的算法,CompareJSON确保了用户能够在短时间内完成复杂的JSON比较任务,从而提高工作效率,减少错误。 综上所述,CompareJSON JSON对比小程序通过其全面的功能和用户友好的设计,为处理JSON...
此外,描述还提及了“包含了cJSON、JsonTree、Nlohmann Json比较测试的代码”,这表明项目中可能包含了一些基准测试,用于比较JsonTree与cJSON以及Nlohmann JSON(一个流行的C++ JSON库)在性能和使用上的差异。...
本压缩包“json_comparator_jar.zip”提供了一个JSON比较工具,帮助开发者在Java环境下快速对比两个JSON对象或文件的差异。 该工具的关键在于,它能够解析并理解JSON格式的数据,然后进行深度比较,找出两者之间的...
//Program.cs 里是一些比较极端的测试,实际使用时只需复制 JSON.cs 到项目里。 //比如类Vec2: public class Vec2 { public float x; public float y; } //编码范例: Vec2 v1 = new Vec2(); v1.x = 1.23f; v1....
JSON 和 XML 比较 JSON 和 XML 是两种常用的数据交换格式,它们之间有很多相似之处,也有许多不同之处。下面我们将从多方面对比 JSON 和 XML。 可读性和可扩展性 JSON 和 XML 都是文本表示的数据格式,可以跨平台...
本文将探讨Java中生成JSON的技术比较,包括不同库的使用、性能和适用场景。 首先,让我们介绍Java中最常用的几个JSON库: 1. **Jackson**: Jackson是Java社区中最流行的JSON处理库之一,它提供了多种方式来序列...
测试代码会遍历这些库,对它们的解析和序列化能力进行计时,然后比较结果。这有助于开发者根据实际需求选择最适合的库。 总结来说,C++中的JSON库选择应该基于项目的具体需求,如性能、内存效率、易用性、兼容性和...
在这个主题中,我们将深入探讨两个重要的插件:文件比较和JSON格式化插件,这些插件能够显著提升Notepad++的功能和用户体验。 首先,让我们来谈谈文件比较插件。在开发过程中,经常需要对比不同版本的文件或者查找...
3. **Ajax中的XML与JSON比较**: - XML作为数据交换格式,具有结构化和标准化的优势,适合复杂的结构化数据,但文件体积大,解析和生成较为复杂。 - JSON相对XML更轻量级,解析和生成速度快,且JavaScript原生支持...
7. **JSON与其他数据格式的比较**: JSON相比于XML,其格式更简洁,解析速度更快。但XML提供了更多的结构和元数据支持,适合复杂的数据表示。根据具体应用场景选择合适的格式。 8. **跨语言通信**: 由于JSON的...
JSON差异JSON Diff扩展了上的出色工作,并为JSON文档提供了语义比较工具。 我经常处理大型文档,很难看到它们之间的差异。 普通的文本比较工具可以很好地发现JavaScript代码中的差异,但是JSON数据在文本中可以具有...
#### JSON与XML的比较 JSON相比XML有以下优势: - **更简洁**:JSON格式更加紧凑,减少了不必要的标记。 - **易于解析**:JavaScript可以直接处理JSON数据,无需额外的解析过程。 - **性能更好**:JSON数据体积小,...
`PerformanceBsonJson.java`可能是用于比较JSON和BSON序列化和反序列化性能的测试代码。 在效率方面,BSON的二进制性质使其在解析和编码时速度更快,因为计算机处理二进制数据比处理文本数据更高效。然而,JSON的...
JSON 转 HTML 的前端js模块可以方便的将json,直接渲染成可以伸缩的div,对于小型json比较方便效果图 标签:json2html
例如,"Beyond Compare"是一款强大的文件比较工具,它具有专门比较JSON文件的功能,可以清晰地显示出两份JSON之间的不同之处,包括键值对的增删改等变化。 在文件名列表中提到的"fengzuang%"可能是某个文件或目录的...
1. **commons-collections-3.2.1**:这是Apache Commons Collections库,提供了一组高级集合框架,包括各种实用工具类、迭代器、比较器、堆栈、队列等,增强了Java集合框架的功能。在`json-lib`中,它可能被用作数据...