這里使用得是阿里巴巴的fastjson包
public static void main(String[] args) {
String a = "";
String b = "";
a = "[{\"mainTableNameCN\":\"主表名稱1\",\"mainTableNameEN\":\"mainTableName\",\"mainTableField\":[{\"name\":\"businessNumber\",\"name_zh\":\"商機編號\",\"name_show\":\"商機編號\",\"type\":\"varchar\",\"description\":\"商機編號\",\"is_relation\":\"true\",\"relation_id\":\"code_321623414370\",\"item_type\":\"code\",\"LAY_TABLE_INDEX\":0},{\"name\":\"businessName\",\"name_zh\":\"商機名稱\",\"name_show\":\"商機名稱\",\"type\":\"varchar\",\"description\":\"商機名稱\",\"is_relation\":\"true\",\"relation_id\":\"input_572045107844\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":1},{\"name\":\"judgeConvener\",\"name_zh\":\"評審召集人\",\"name_show\":\"評審召集人\",\"type\":\"varchar\",\"description\":\"評審召集人\",\"is_relation\":\"true\",\"relation_id\":\"input_624238012444\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":2},{\"name\":\"reviewTime\",\"name_zh\":\"評審時間\",\"name_show\":\"評審時間\",\"type\":\"varchar\",\"description\":\"評審時間\",\"is_relation\":\"true\",\"relation_id\":\"input_763487246487\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":3},{\"name\":\"reviewAddress\",\"name_zh\":\"評審地點\",\"name_show\":\"評審地點\",\"type\":\"varchar\",\"description\":\"評審地點\",\"is_relation\":\"true\",\"relation_id\":\"input_760308573244\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":4},{\"name\":\"reviewParticipation\",\"name_zh\":\"評審參加人員\",\"name_show\":\"評審參加人員\",\"type\":\"varchar\",\"description\":\"評審參加 人員\",\"is_relation\":\"true\",\"relation_id\":\"textarea_075567260317\",\"item_type\":\"textarea\",\"LAY_TABLE_INDEX\":5},{\"name\":\"mainOpinions\",\"name_zh\":\"主要意見\",\"name_show\":\"主要意見\",\"type\":\"varchar\",\"description\":\"主要意見\",\"is_relation\":\"true\",\"relation_id\":\"textarea_801121671777\",\"item_type\":\"textarea\",\"LAY_TABLE_INDEX\":6},{\"name\":\"reviewConclusion\",\"name_zh\":\"評審結(jié)論\",\"name_show\":\"評審結(jié)論\",\"type\":\"varchar\",\"description\":\"評審結(jié)論\",\"is_relation\":\"true\",\"relation_id\":\"checkbox_467861227571\",\"item_type\":\"checkBox\",\"LAY_TABLE_INDEX\":7},{\"name\":\"exceptionConclusion\",\"name_zh\":\"例外申請結(jié)論\",\"name_show\":\"例外申請結(jié)論\",\"type\":\"varchar\",\"description\":\"例外申請結(jié)論\",\"is_relation\":\"true\",\"relation_id\":\"textarea_827103384676\",\"item_type\":\"textarea\",\"LAY_TABLE_INDEX\":8},{\"name\":\"businesshead\",\"name_zh\":\"商機負(fù)責(zé)人\",\"name_show\":\"商機負(fù)責(zé)人\",\"type\":\"varchar\",\"description\":\"商機負(fù)責(zé)人\",\"is_relation\":false,\"relation_id\":\"input_141855644540\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":9}],\"subTableField\":[]}]";
b = "[{\"mainTableNameCN\":\"主表名稱\",\"mainTableNameEN\":\"mainTableName\",\"mainTableField\":[{\"name\":\"businessName\",\"name_zh\":\"商機名稱\",\"name_show\":\"商機名稱\",\"type\":\"varchar\",\"description\":\"商機名稱\",\"is_relation\":\"true\",\"relation_id\":\"input_572045107844\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":1},{\"name\":\"judgeConvener\",\"name_zh\":\"評審召集人\",\"name_show\":\"評審召集人\",\"type\":\"varchar\",\"description\":\"評審召集人\",\"is_relation\":\"true\",\"relation_id\":\"input_624238012444\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":2},{\"name\":\"reviewTime\",\"name_zh\":\"評審時間\",\"name_show\":\"評審時間\",\"type\":\"varchar\",\"description\":\"評審時間\",\"is_relation\":\"true\",\"relation_id\":\"input_763487246487\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":3},{\"name\":\"reviewAddress\",\"name_zh\":\"評審地點\",\"name_show\":\"評審地點\",\"type\":\"varchar\",\"description\":\"評審地點\",\"is_relation\":\"true\",\"relation_id\":\"input_760308573244\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":4},{\"name\":\"reviewParticipation\",\"name_zh\":\"評審參加人員\",\"name_show\":\"評審參加人員\",\"type\":\"varchar\",\"description\":\"評審參加 人員\",\"is_relation\":\"true\",\"relation_id\":\"textarea_075567260317\",\"item_type\":\"textarea\",\"LAY_TABLE_INDEX\":5},{\"name\":\"mainOpinions\",\"name_zh\":\"主要意見\",\"name_show\":\"主要意見\",\"type\":\"varchar\",\"description\":\"主要意見\",\"is_relation\":\"true\",\"relation_id\":\"textarea_801121671777\",\"item_type\":\"textarea\",\"LAY_TABLE_INDEX\":6},{\"name\":\"reviewConclusion\",\"name_zh\":\"評審結(jié)論\",\"name_show\":\"評審結(jié)論\",\"type\":\"varchar\",\"description\":\"評審結(jié)論\",\"is_relation\":\"true\",\"relation_id\":\"checkbox_467861227571\",\"item_type\":\"checkBox\",\"LAY_TABLE_INDEX\":7},{\"name\":\"exceptionConclusion\",\"name_zh\":\"例外申請結(jié)論\",\"name_show\":\"例外申請結(jié)論\",\"type\":\"varchar\",\"description\":\"例外申請結(jié)論\",\"is_relation\":\"true\",\"relation_id\":\"textarea_827103384676\",\"item_type\":\"textarea\",\"LAY_TABLE_INDEX\":8},{\"name\":\"businesshead\",\"name_zh\":\"商機負(fù)責(zé)人\",\"name_show\":\"商機負(fù)責(zé)人\",\"type\":\"varchar\",\"description\":\"商機負(fù)責(zé)人\",\"is_relation\":false,\"relation_id\":\"input_141855644540\",\"item_type\":\"input\",\"LAY_TABLE_INDEX\":9},{\"name\":\"businessNumber\",\"name_zh\":\"商機編號\",\"name_show\":\"商機編號\",\"type\":\"varchar\",\"description\":\"商機編號\",\"is_relation\":\"true\",\"relation_id\":\"code_321623414370\",\"item_type\":\"code\",\"LAY_TABLE_INDEX\":0}],\"subTableField\":[]}]";
// a = "[]";
JSONArray js1 = JSONArray.parseArray(a);
JSONArray js2 = JSONArray.parseArray(b);
// Object js1 = JSONObject.fromObject(a);
// Object js2 = JSONObject.fromObject(b);
arrangeJson(js1);
arrangeJson(js2);
contrast(js1, js2);
//net.sf.json包會認(rèn)為 "field": abc123 非法陶舞,而com.google.gson包會自行轉(zhuǎn)成 "field": "abc123"
// JSONObject js3 = JSONObject.fromObject(a);
// JSONObject js4 = JSONObject.fromObject(b);
// arrangeJson(js3);
// arrangeJson(js4);
// contrast(js3, js4);
}
static void contrast(Object a, Object b) {
boolean i = false;
System.out.println("json對象a序列化=" + a.toString());
System.out.println("json對象b序列化=" + b.toString());
if (a.toString().equals(b.toString())) {
i = true;
}
System.out.println("兩個json對象是否等價:" + i);
}
//將json對象的各個元素重新排序
static void arrangeJson(Object js) {
if (js instanceof JSONObject) {
JSONObject jsCopy = JSONObject.parseObject(js.toString()); //將json對象復(fù)制一份,進行遞歸遍歷取值
Iterator i = jsCopy.entrySet().iterator();
ArrayList<Object> arr = new ArrayList<Object>();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
arr.add(entry.getKey().toString());
//System.out.println(entry.getKey() + " " + entry.getValue()+" "+jsCopy.get(entry.getKey()).getClass());
((JSONObject) js).remove(entry.getKey().toString()); //清空舊的子元素
}
sortArr(arr);
for (int n = 0; n < arr.size(); n++) {
//System.out.println("arr="+arr.get(n));
String key = arr.get(n).toString();
if (jsCopy.get(key) instanceof JSONObject || (jsCopy.get(key) instanceof JSONArray)) {
arrangeJson(jsCopy.get(key)); //遞歸調(diào)整json對象
}
((JSONObject) js).put(key, jsCopy.get(key)); //重新組裝序列化的子元素
}
}
if (js instanceof JSONArray) {
JSONArray jsCopy = JSONArray.parseArray(js.toString());
ArrayList<Object> arr = new ArrayList<Object>();
for (int n = 0; n < jsCopy.size(); n++) {
arr.add(jsCopy.get(n));
((JSONArray) js).remove(0);
}
sortArr(arr);
for (int n = 0; n < arr.size(); n++) {
//System.out.println("arr_"+n+arr.get(n));
arrangeJson((Object) arr.get(n));
((JSONArray) js).add((Object) arr.get(n));
}
}
}
//將數(shù)組元素按照哈希碼從小到大重新排序
private static void sortArr(ArrayList<Object> arr) {
int len = arr.size();
int[] n = new int[len];
ArrayList<Object> arrCopy = (ArrayList<Object>) arr.clone();
Object[] obj = new Object[len];
for (int i = 0; i < len; i++) {
n[i] = arrCopy.get(i).hashCode();
obj[i] = arrCopy.get(i);
arr.remove(0);
}
for (int i = 0; i < len; i++) {
for (int y = i + 1; y < len; y++) {
if (n[i] < n[y]) {
int x = n[y];
n[y] = n[i];
n[i] = x;
Object s = obj[y];
obj[y] = obj[i];
obj[i] = s;
}
}
}
for (int i = 0; i < len; i++) {
arr.add(obj[i]);
}
}