2013-11-22 43 views
1

刪除重複我有一個JSON名單如下:在jsonarray的Java

"edgelist":[{"value":15.0,"date":20130729,"type":"url","destination":"224883242"}, 
       {"value":15.0,"date":20130729,"type":"url","destination":"224883243"}, 
       {"value":15.0,"date":20130730,"type":"url","destination":"224883242"} 
      ] 

看看「目的地和日期..

目標224883242重複兩次..

我想要保持只是最新的獨特jsons ... 所以輸出將是

"edgelist":[    {"value":15.0,"date":20130729,"type":"url","destination":"224883243"}, 
        {"value":15.0,"date":20130730,"type":"url","destination":"224883242"} 
       ] 

這樣做的最好方法是什麼?

如果目的地和日期相同,則保留但不是兩者。

回答

2
  1. 將這些JSON對象建模爲適當的Java對象。給他們一個Class

  2. 實現爲Class讓他們依賴於destinationdate領域hashcodeequals

  3. 將所有對象推入Set。由此產生的集合將沒有重複。

-1

可以使用刪除重複的JSONObject的JSON的Hashset數組:

//Jsonarray with duplicates: 
//[{"key1":"a"},{"key2":"b"},{"key3":"c"},{"key1":"a"},{"key2":"b"}] 
JSONArray jArray = ja; 
JSONArray tempArray=new JSONArray(); 
Set<String> uniqueset =new HashSet<String>(); 


for (int i = 0; i < jArray.size(); i++) { 
     JSONObject jobject = (JSONObject) jArray.get(i); 
     Set<String> keys = jobject.keySet(); 
    for (Iterator<String> it = keys.iterator(); it.hasNext();) { 
     String currentKey = it.next(); 
     System.out.println(currentKey); 

     String jsonvalue=(String) jobject.get(currentKey); 
     if(uniqueset.contains(jsonvalue)) 
     { 
     continue; 
     } 
     else{ 
     uniqueset.add(jsonvalue); 
     tempArray.add(jArray.get(i)); 
     } 

     } 
} 
    jArray= tempArray; 
    System.out.println(jArray); 
    //Output:[{"key1":"a"},{"key2":"b"},{"key3":"c"}] 

    }