我是这个论坛的新手。我正在尝试比较两个目录结构,一个在远程,另一个在本地。目前我正在做的是基于某些事情,我正在从 server side(remote) 制作一个 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":[]},{"folder":1,"name":"我的视频","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":[]}]},{"文件夹":1,"name":"我的文档","innerJSON":[]},{"folder":1,"name":"My Tunes","innerJSON":[]},{"folder" :1,"name":"Music","innerJSON":[{"folder":1,"name":"ROnly-SubFolder-to-user10","innerJSON":[]}]},{"folder":1,"name":"kamal","innerJSON":[]},{"folder":1,"name":"zxcvb","innerJSON":[] },{"folder":1,"name":"我的图片","innerJSON":[]},{"folder":1,"name":"abc","innerJSON":[]}]}
js2={"JSArray":[{"folder":1,"name":"Music","innerJSON":[{"folder":0,"name":"Track_12_[1].mp3"},{ "folder":1,"name":"ROnly-SubFolder-to-user10","innerJSON":[]},{"folder":0,"name":"08_Track_8.wma"}]},{"文件夹":1,"name":"我的文档","innerJSON":[{"folder":0,"name":"temp.ico"},{"folder":0,"name":"logo -mdpi.png"}]},{"folder":1,"name":"我的音乐","innerJSON":[]},{"folder":1,"name":"我的图片"," innerJSON":[{"folder":0,"name":"ab16807asset.JPG"}]},{"folder":1,"name":"我的曲调","innerJSON":[{"folder":0,"name":"dharamshala.jpg"},{"folder":0,"name":"Logo.gif"}]},{"文件夹":1,"name":"我的视频","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 的差异。它们代表目录结构和其中的文件,因此可以有 n 级文件夹。所以需要记住这一点。
在 JSON 中,“innerJSON”键表示从该文件夹到 n 级的文件夹内的文件夹。
谢谢