1

このフォーラムは初めてです。リモートにあるディレクトリ構造とローカルにある別のディレクトリ構造を比較しようとしています。現在、私がやっていることは、サーバー側(リモート)からディレクトリ構造のJSONArrayを作成している特定のことに基づいています。同様に、クライアント側のディレクトリ構造の JSONArray を作成しています。ここで、これら 2 つの 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":"My Music","innerJSON":[]},{"folder":1,"name":"My Videos","innerJSON ":[]},{"folder":1,"name":"RW-By-10-No-New-Folder","innerJSON":[]},{"folder":1,"name": "RW-By-11-plus-New-Folder","innerJSON":[{"folder":1,"name":"ab25249asset.001829.PNG","innerJSON":[]}]},{" folder":1,"name":"My Documents","innerJSON":[]},{"folder":1,"name":"My Tunes","innerJSON":[]},{"folder" :1,"name":"Music","innerJSON":[{"folder":1,"name":"ROnly-SubFolder-to-user10","innerJSON":[]}]},{"フォルダー":1,"名前":"カマル","innerJSON":[]},{"フォルダー":1,"名前":"zxcvb","innerJSON":[] },{"フォルダ":1,"名前":"マイ ピクチャ","innerJSON":[]},{"フォルダ":1,"名前":"abc","innerJSON":[]}]}

js2={"JSArray":[{"フォルダ":1,"名前":"音楽","innerJSON":[{"フォルダ":0,"名前":"Track_12_[1].mp3"},{ "folder":1,"name":"ROnly-SubFolder-to-user10","innerJSON":[]},{"folder":0,"name":"08_Track_8.wma"}]},{" folder":1,"name":"My Documents","innerJSON":[{"folder":0,"name":"temp.ico"},{"folder":0,"name":"logo -mdpi.png"}]},{"folder":1,"name":"My Music","innerJSON":[]},{"folder":1,"name":"My Pictures"," innerJSON":[{"フォルダー":0,"名前":"ab16807asset.JPG"}]},{"フォルダー":1,"名前":"My Tunes","innerJSON":[{"folder":0,"name":"dharamshala.jpg"},{"folder":0,"name":"Logo.gif"}]},{"folder ":1,"name":"My Videos","innerJSON":[]},{"folder":1,"name":"RW-By-10-No-New-Folder","innerJSON": []},{"folder":1,"name":"RW-By-11-plus-New-Folder","innerJSON":[{"folder":1,"name":"ab25249asset.001829. PNG","innerJSON":[]}]}]}RW-By-10-No-New-Folder","innerJSON":[]},{"folder":1,"name":"RW-By-11-plus-New-Folder","innerJSON": [{"フォルダ":1,"名前":"ab25249asset.001829.PNG","innerJSON":[]}]}]}RW-By-10-No-New-Folder","innerJSON":[]},{"folder":1,"name":"RW-By-11-plus-New-Folder","innerJSON": [{"フォルダ":1,"名前":"ab25249asset.001829.PNG","innerJSON":[]}]}]}

さらに何か必要な場合は教えてください。このタイプの JSON の diff が必要です。それらはディレクトリ構造とその中のファイルを表すため、nレベルのフォルダーが存在する可能性があるため、そのことを覚えておく必要があります。

JSON では、「innerJSON」キーは、そのフォルダーから n レベルまでのフォルダー内のフォルダーを表します。

ありがとう

4

0 に答える 0