Java中多個Json字符串對比demo

這里使用得是阿里巴巴的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]);
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铡俐,隨后出現(xiàn)的幾起案子祠乃,更是在濱河造成了極大的恐慌抬探,老刑警劉巖覆获,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件率拒,死亡現(xiàn)場離奇詭異倍谜,居然都是意外死亡迈螟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門尔崔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來答毫,“玉大人,你說我怎么就攤上這事季春∠绰В” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耘拇。 經(jīng)常有香客問我撵颊,道長,這世上最難降的妖魔是什么惫叛? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任倡勇,我火速辦了婚禮,結(jié)果婚禮上嘉涌,老公的妹妹穿的比我還像新娘妻熊。我一直安慰自己,他們只是感情好洛心,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布固耘。 她就那樣靜靜地躺著,像睡著了一般词身。 火紅的嫁衣襯著肌膚如雪厅目。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天法严,我揣著相機與錄音损敷,去河邊找鬼。 笑死深啤,一個胖子當(dāng)著我的面吹牛拗馒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溯街,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼诱桂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呈昔?” 一聲冷哼從身側(cè)響起挥等,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堤尾,沒想到半個月后肝劲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡郭宝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年辞槐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粘室。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡榄檬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衔统,到底是詐尸還是另有隱情鹿榜,我是刑警寧澤先朦,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站犬缨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏棉浸。R本人自食惡果不足惜怀薛,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迷郑。 院中可真熱鬧枝恋,春花似錦、人聲如沸嗡害。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霸妹。三九已至十电,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叹螟,已是汗流浹背鹃骂。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罢绽,地道東北人畏线。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像良价,于是被迫代替她去往敵國和親寝殴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 【健心踐行打卡第221天:】(2018.6.6) 一明垢、功課: 靜心30分鐘蚣常,完成。 二袖外、感恩 1.感恩倩倩史隆,今天帶...
    Yoyo袁閱讀 77評論 2 2
  • 昨日補充 遠程服務(wù)的配置文件 ssh服務(wù)端配置文件說明 ssh的防范措施 1 .盡量使用秘鑰認(rèn)證,不要使用密碼認(rèn)證...
    麟之趾a閱讀 423評論 0 0
  • 是我比較挑剔,我很少看到簡書純文學(xué)作品曼验,有泌射,但我看到的不是很多,首頁推薦的幾乎是干貨鬓照,各種各樣的熔酷,不帶重復(fù)...
    藍色追尋閱讀 253評論 0 0
  • 教師成長的關(guān)鍵事件:賽課和科研。 不反思豺裆,不善于反思拒秘,沒時間反思…
    看客阿呆閱讀 130評論 0 0