java 比较两个json的变化_比较两个JSON不一样的地方,输出key

本文介绍了一个Java工具类JsonDiff,用于比较两个JSON对象的差异,详细地输出不同之处的键值。通过递归遍历JSON对象的键值对,实现了深度比较,并打印出变化的键及对应的值。
摘要由CSDN通过智能技术生成

我们在做开发的时候,通常需比较两个JSON不一样的地方,分析原因,找出错误。API只是比较是否一样,但不输出哪个Key不一样。所以自己写了一个工具。

package tool;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URL;

import java.util.Iterator;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import org.apache.commons.io.IOUtils;

public class JsonDiff {

public static void main(String[] args) {

JSONObject json1 = JSONObject.fromObject("{\\"a\\":\\"a\\",\\"b\\":\\"b\\",\\"c\\":\\"c\\"}");

JSONObject json2 = JSONObject.fromObject("{\\"a\\":\\"a1sfsfsf\\",\\"b\\":\\"b\\",\\"c\\":\\"c\\"}");

compareJson(json1, json2,null);

/* for (int i = 0; i < 10000; i++) {

if (! json1.toString().equals( json1.toString())) {

System.out.println(654565);

}

}*/

}

public static void compareJson(JSONObject json1, JSONObject json2,String key) {

Iterator i = json1.keys();

while (i.hasNext()) {

key = i.next();

compareJson(json1.get(key), json2.get(key),key);

}

}

public static void compareJson(Object json1,Object json2,String key) {

if ( json1 instanceof JSONObject ) {

compareJson((JSONObject) json1 ,(JSONObject) json2,key);

}else if ( json1 instanceof JSONArray ) {

compareJson((JSONArray) json1 ,(JSONArray) json2,key);

}else if(json1 instanceof String ){

compareJson((String) json1 ,(String) json2,key);

}else {

compareJson(json1.toString(), json2.toString(), key);

}

}

public static void compareJson(String str1,String str2,String key) {

if (!str1.equals(str2)) {

System.out.println("key:"+key+ ",json1:"+ str1 +",json2:"+str2);

}

}

public static void compareJson(JSONArray json1,JSONArray json2,String key) {

Iterator i1= json1.iterator();

Iterator i2= json2.iterator();

while ( i1.hasNext()) {

compareJson(i1.next(), i2.next(),key);

}

}

public static JSONObject getJson(String url) {

try {

URL url1 = new URL(url);

InputStream in = url1.openStream();

OutputStream out = new ByteArrayOutputStream();

IOUtils.copy(in, out);

String aa = out.toString();

in.close();

out.close();

return JSONObject.fromObject(aa);

} catch (Exception e) {

e.printStackTrace();

}

return new JSONObject();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值