json比較
3549 ワード
詳細
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 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 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 list = new ArrayList();
compare(json1, json2, list);
for (String str : list) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}