`
lambertsprite
  • 浏览: 11775 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

json比较

    博客分类:
  • java
 
阅读更多
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比较全的jar集合

    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-...

    json比对js插件

    2. **对比功能**:核心功能是对两个JSON对象进行深度比较,不仅检查键值是否相同,还会检查嵌套的对象和数组是否存在差异。 3. **高亮显示**:当发现不同之处时,工具会以醒目的方式(如颜色高亮)突出显示这些差异...

    notepad插件(json,文件比较,导出).rar

    这个压缩包文件"notepad插件(json,文件比较,导出).rar"包含了一些针对Notepad++的增强功能插件,旨在提升用户在处理JSON数据、进行文件比较以及文件导出时的效率。 首先,我们来看NPPJSONViewer插件。这款插件专门...

    JSON对比工具介绍(含单元测试对比,接口API响应对比【忽略指定噪声字段key】)

    2,对于API响应JSON数据,需要对比时使用文档中第二个工具集,可以指定忽略噪声字段,比较强大。 不废话:https://github.com/kvnxiao/jsonequals 使用至今,发现对JsonArray的顺序是必须判断的,需要自定义修改。

    CompareJSON JSON对比小程序

    通过简洁的界面和高效的算法,CompareJSON确保了用户能够在短时间内完成复杂的JSON比较任务,从而提高工作效率,减少错误。 综上所述,CompareJSON JSON对比小程序通过其全面的功能和用户友好的设计,为处理JSON...

    JsonTree: 进一步封装cJSON

    此外,描述还提及了“包含了cJSON、JsonTree、Nlohmann Json比较测试的代码”,这表明项目中可能包含了一些基准测试,用于比较JsonTree与cJSON以及Nlohmann JSON(一个流行的C++ JSON库)在性能和使用上的差异。...

    json_comparator_jar.zip

    本压缩包“json_comparator_jar.zip”提供了一个JSON比较工具,帮助开发者在Java环境下快速对比两个JSON对象或文件的差异。 该工具的关键在于,它能够解析并理解JSON格式的数据,然后进行深度比较,找出两者之间的...

    C# 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。 可读性和可扩展性 JSON 和 XML 都是文本表示的数据格式,可以跨平台...

    Java生成json技术比较

    本文将探讨Java中生成JSON的技术比较,包括不同库的使用、性能和适用场景。 首先,让我们介绍Java中最常用的几个JSON库: 1. **Jackson**: Jackson是Java社区中最流行的JSON处理库之一,它提供了多种方式来序列...

    C++ json库性能对比

    测试代码会遍历这些库,对它们的解析和序列化能力进行计时,然后比较结果。这有助于开发者根据实际需求选择最适合的库。 总结来说,C++中的JSON库选择应该基于项目的具体需求,如性能、内存效率、易用性、兼容性和...

    notepad++文件比较和json格式化插件

    在这个主题中,我们将深入探讨两个重要的插件:文件比较和JSON格式化插件,这些插件能够显著提升Notepad++的功能和用户体验。 首先,让我们来谈谈文件比较插件。在开发过程中,经常需要对比不同版本的文件或者查找...

    Ext+json,+jquery培训资料

    3. **Ajax中的XML与JSON比较**: - XML作为数据交换格式,具有结构化和标准化的优势,适合复杂的结构化数据,但文件体积大,解析和生成较为复杂。 - JSON相对XML更轻量级,解析和生成速度快,且JavaScript原生支持...

    JSON库使用DEMO

    7. **JSON与其他数据格式的比较**: JSON相比于XML,其格式更简洁,解析速度更快。但XML提供了更多的结构和元数据支持,适合复杂的数据表示。根据具体应用场景选择合适的格式。 8. **跨语言通信**: 由于JSON的...

    jdd:语义JSON比较工具

    JSON差异JSON Diff扩展了上的出色工作,并为JSON文档提供了语义比较工具。 我经常处理大型文档,很难看到它们之间的差异。 普通的文本比较工具可以很好地发现JavaScript代码中的差异,但是JSON数据在文本中可以具有...

    JS中Json对象

    #### JSON与XML的比较 JSON相比XML有以下优势: - **更简洁**:JSON格式更加紧凑,减少了不必要的标记。 - **易于解析**:JavaScript可以直接处理JSON数据,无需额外的解析过程。 - **性能更好**:JSON数据体积小,...

    JSON BSON 效率比较

    `PerformanceBsonJson.java`可能是用于比较JSON和BSON序列化和反序列化性能的测试代码。 在效率方面,BSON的二进制性质使其在解析和编码时速度更快,因为计算机处理二进制数据比处理文本数据更高效。然而,JSON的...

    json2html精简版.zip

    JSON 转 HTML 的前端js模块可以方便的将json,直接渲染成可以伸缩的div,对于小型json比较方便效果图 标签:json2html

    jsonlib需要jar包

    1. **commons-collections-3.2.1**:这是Apache Commons Collections库,提供了一组高级集合框架,包括各种实用工具类、迭代器、比较器、堆栈、队列等,增强了Java集合框架的功能。在`json-lib`中,它可能被用作数据...

    untiy操作json,比unity自带的jsonUtils好用多了

    untiy操作json,比unity自带的jsonUtils好用多了 文章地址 https://blog.csdn.net/weixin_44568736/article/details/124608578

Global site tag (gtag.js) - Google Analytics