当JSONArrays本身包含JSONObject时,如何比较两个JSONArray并找到差异器,JSONObject又包含JSONArray

时间:2013-08-31 03:31:48

标签: comparison arrays

我是这个论坛的新手。我正在尝试比较一个位于远程的目录结构和另一个位于本地的结构。 目前我正在做的是基于某些事情我正在从服务器端(远程)制作一个直接结构的JSONArray。我正在制作客户端目录结构的JSONArray。现在我想比较这两个JSONArray并得到它们之间的区别。

此外,我还希望保持目录结构的级别。这意味着在生成的JSONArray中,差异应该在适当的级别,我可以直接使用目录。

请指导我如果我在这里犯了任何错误,因为我是新来的论坛。

我试过下面的代码。

public static boolean jsonObjsAreEqual (JSONObject js1, JSONObject js2) throws JSONException {
    if (js1 == null || js2 == null) {
        System.out.println(METHOD+"js1 or js2 null");
        return (js1 == js2);
    }
    List<String> l1 =  Arrays.asList(JSONObject.getNames(js1));
    Collections.sort(l1);
    Collections.reverse(l1);
    List<String> l2 =  Arrays.asList(JSONObject.getNames(js2));
    Collections.sort(l2);
    Collections.reverse(l2);
    if (!l1.equals(l2)) {
        return false;
    }
    for (String key : l1) {
        Object val1 = js1.get(key);
        Object val2 = js2.get(key);
        if (val1 instanceof JSONObject) {
            if (!(val2 instanceof JSONObject)) {
                return false;
            }
            if (jsonObjsAreEqual((JSONObject)val1, (JSONObject)val2)) {
                return true;
            }else{
                return false;
            }
        }
        if (val1 instanceof JSONArray) {
            if (!(val2 instanceof JSONArray)) {
                return false;
            }
            JSONArray arr1=JsonSorter.sortJsonByKey((JSONArray) val1, "name");
            JSONArray arr2=JsonSorter.sortJsonByKey((JSONArray) val2, "name");
            int flag=0;
            int count=0;
            int []arr=new int[100];
            for(int k=0;k<arr1.length();k++){
                flag=0;
                for(int l=0;l<arr2.length();l++){
                    boolean returnval=jsonObjsAreEqual((JSONObject)arr1.get(k), (JSONObject)arr2.get(l));
                    if (returnval) {
                        flag=1;
                        break;
                    }
                }
                if(flag==0){
                    return false;
                }
            }
        }else{
            if (val1 == null) {
                if (val2 != null) {
                    return false;
                }
            }  else if (!val1.equals(val2)) {
                return false;
            }
        }
    }
    return true;
}

例如我在JSON下使用作为参数;

js1 = {“JSArray”:[{“folder”:1,“name”:“我的音乐”,“innerJSON”:[]},{“文件夹”:1,“名称”:“我的视频” “innerJSON”:[]},{ “文件夹”:1, “名称”: “RW-BY-10无新文件夹”, “innerJSON”:[]},{ “文件夹”:1,”命名 “:” RW-BY-11加新文件夹”, “innerJSON”:[{ “文件夹”:1, “名称”: “ab25249asset.001829.PNG”, “innerJSON”:[]}]} ,{“folder”:1,“name”:“我的文档”,“innerJSON”:[]},{“folder”:1,“name”:“My Tunes”,“innerJSON”:[]},{ “文件夹”:1, “名称”: “音乐”, “innerJSON”:[{ “文件夹”:1, “名称”: “RONLY-子目录到user10”, “innerJSON”:[]}]}, { “文件夹”:1, “名称”: “哈拉”, “innerJSON”:[]},{ “文件夹”:1, “名称”: “zxcvb”, “innerJSON”:[]},{ “文件夹” :1,“name”:“我的图片”,“innerJSON”:[]},{“folder”:1,“name”:“abc”,“innerJSON”:[]}]}

JS2 = { “JSArray”:[{ “文件夹”:1, “名称”: “音乐”, “innerJSON”:[{ “文件夹”:0, “名称”: “Track_12_ [1] .MP3” },{ “文件夹”:1, “名称”: “RONLY-子目录到user10”, “innerJSON”:[]},{ “文件夹”:0, “名称”: “08_Track_8.wma”}]} ,{“folder”:1,“name”:“我的文档”,“innerJSON”:[{“folder”:0,“name”:“temp.ico”},{“folder”:0,“name” :“logo-mdpi.png”}]},{“folder”:1,“name”:“我的音乐”,“innerJSON”:[]},{“文件夹”:1,“名称”:“我的图片“,”innerJSON“:[{”folder“:0,”name“:”ab16807asset.JPG“}]},{”folder“:1,”name“:”My Tunes“,”innerJSON“:[{”文件夹“:0,”name“:”dharamshala.jpg“},{”folder“:0,”name“:”Logo.gif“}]},{”folder“:1,”name“:”我的视频”, “innerJSON”:[]},{ “文件夹”:1, “名称”: “RW-BY-10无新文件夹”, “innerJSON”:[]},{ “文件夹”:1, “名称”: “RW-BY-11加新文件夹”, “innerJSON”:[{ “文件夹”:1, “名称”: “ab25249asset.001829.PNG”, “innerJSON”:[]}] }]}

告诉我是否还需要更多。我想要这种类型的JSON的差异。它们代表了目录结构和文件,因此可以有n级文件夹。所以需要牢记这一点。

在JSON中,“innerJSON”键表示文件夹内最高n级的文件夹。

由于

0 个答案:

没有答案