2015-05-21 3 views
0

я получил в JSON, как показано нижеКак динамически удалить дубликаты JSON объекта из JSON массива строк

{ 
    "brands": [ 
     { 
      "name": "ACC", 
      "quantity": "0", 
      "listedbrandID": 1, 
      "status": "0" 
     } 
    ], 
    "others": [ 
     { 
      "name": "dd", 
      "quantity": "55", 
    "listedbrandID": 1 

     }, 
     { 
      "name": "dd", 
      "quantity": "55", 
    "listedbrandID": 1 

     } 

    ] 
} 

Я пытаюсь удалить dupcate объекты JSON из массива Других

Я пытался его это способ

String JSON = "{ 
    "brands": [ 
     { 
      "name": "ACC", 
      "quantity": "0", 
      "listedbrandID": 1, 
      "status": "0" 
     } 
    ], 
    "others": [ 
     { 
      "name": "dd", 
      "quantity": "55", 
    "listedbrandID": 1 

     }, 
     { 
      "name": "dd", 
      "quantity": "55", 
    "listedbrandID": 1 

     } 

    ] 
}" ; 


     JSONObject json_obj = new JSONObject(json); 
     JSONArray array = json_obj.getJSONArray("others"); 
     HashSet<Others> map = new HashSet<Others>(); 
     for (int k = 0; k < array.length(); k++) { 
      Others otherbrands = new Others(); 
      String name = array.getJSONObject(k).getString("name"); 
      String quantity = array.getJSONObject(k).getString("quantity"); 
      String listedbrandID = array.getJSONObject(k).getString("listedbrandID"); 
      if(name!=null && !name.trim().equals("")) 
      { 
      otherbrands.setName(name); 
      otherbrands.setQuantity(quantity); 
      otherbrands.setListedbrandID(listedbrandID); 
      map.add(otherbrands); 
      } 
     } 
     for (int k = 0; k < array.length(); k++) 
     { 
      String name = array.getJSONObject(k).getString("name"); 
      System.out.println(name); 
      if(!map.contains(name.trim())) 
      { 
       array.remove(k); 
      } 
     } 
     System.out.println(json_obj); 
    } 
} 


import java.util.Arrays; 


public class Others { 

    private String name ; 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getQuantity() { 
     return quantity; 
    } 
    public void setQuantity(String quantity) { 
     this.quantity = quantity; 
    } 
    public String getListedbrandID() { 
     return listedbrandID; 
    } 
    public void setListedbrandID(String listedbrandID) { 
     this.listedbrandID = listedbrandID; 
    } 
    private String quantity ; 
    private String listedbrandID ; 

    @Override 
     public boolean equals (Object other) 
     { 
      if (!(other instanceof Others)) 
       return false; 
      Others ob = (Others) other; 
      return name.equals(ob.name) && 
      quantity.equals(ob.quantity); 
     } 

     @Override 
     public int hashCode() 
     { 
      return Arrays.hashCode(new String[]{quantity,name}); 
     } 



} 

Но его печать всего JSON

+2

Узнайте, как сохранить отступы в соответствии - это затрудняет чтение этого вопроса. –

+0

@AlexisC. так как решить это? – Pawan

+1

Почему у вас есть 'if (! Map.contains (name.trim()))' на первом месте? Ваша «карта» - это «HashSet », поэтому вызов содержит строку String, не имеет смысла. (BTW это очень плохое имя для набора) –

ответ

0

Есть некоторые вопросы, ш Ith код:

  1. System.out.println(json_obj); печатает ваш исходный объект JSON, не кажется, вы не должны быть итерация по набору и печати его содержимое. Попробуйте:

    for(Other other : map) System.out.println("Name : " + other.getName() + " ...");

  2. Я думаю, вам нужно добавить listedbrandID в методе equals.

Чтобы получить JSON только уникальных элементов, вы могли бы просто испускать результирующую HashMap. Пожалуйста, обратитесь к this за предыдущий вопрос SO для получения дополнительной информации.

+0

@npitnti, как я могу удалить дубликаты объектов JSON в этом случае ?? – Pawan

+0

@PreethiJain: Я обновил свой ответ. – npinti

Смежные вопросы