2015-07-06 8 views
6

muszę zapełnić obiekt JSON takiego, powiedzmy to nazywa detailJSON:Czy istnieje sposób mogę opróżnić cały JSONObject - java

{"amount": "5.00", "ac_no": "123456" } 

zrobić to w ten sposób:

detailJSON.put("amount","5.00"); 
detailJSON.put("ac_no","123456"); 

Po tym, detal zostanie wprowadzony w niektórych wspólnych upodobań, a teraz chcę jasnego ten JSONObject i korzystać z tego samego przedmiotu detailJSON aby zapisać kolejny json (z różnych kluczy), w ten sposób:

{"amount":"6.00", "loan_no":"123456"} 

Wiem, że istnieje metoda remove(), która usuwa określony klucz i odpowiednią wartość.

To działa:

detailJSON.remove("amount"); 
detailJSON.remove("ac_no"); 

a następnie użyć go -

detailJSON.put("amount","6.0"); 
detailJSON.put("loan_no","123456"); 

Teraz jest to bardzo prosty przykład. W kodzie, nad którym pracuję, mam wiele kluczy, więc użycie remove faktycznie zwiększa LOC. Za każdym razem przed usunięciem muszę sprawdzić, czy JSONObject has tego konkretnego klucza, czy nie.

Czy istnieje inny sposób, mogę wdrożyć wyczyszczenie JSONObject?

Próbowałem

detailJSON=null ; 
detailJSON=new JSONObject(); 

Ale to nie działa.

Zasadniczo poszukuję czegoś takiego jak metoda clear(), jeśli istnieje.

+1

Czy na pewno chcesz to zrobić? Dlaczego nie używać świeżego JSONObject za każdym razem? Myślę, że bardziej kosztowne byłoby usunięcie każdego pola niż tylko utworzenie nowego. –

+0

@UweAllner Ja też całkowicie zgadzam się z tobą, ale to jest ograniczenie biznesowe, aby utrzymać taką strukturę. – inquisitive

+0

'detailJSON = new JSONObject();' powinien działać. Wygląda na to, że masz gdzieś błąd w kodzie. – Philipp

Odpowiedz

1
Iterator keys = detailJSON.keys(); 
while(keys.hasNext()) 
    detailJSON.remove(keys.next().toString()); 
+0

Daje to błąd kompilacji - 'Może tylko iterować po tablicy lub instancji java.lang.Iterable' w wierszu detailJSON.keys(). detailJSON jest instancją JSONObject. – inquisitive

+0

Cóż, po edycji, to działa, musiałem rzucić na String - 'detailJSON.remove ((String) detailJSON.keys(). Next());' – inquisitive

+0

Ale to w zasadzie to samo co 'detailJSON.remove ("kwota"); "nawet gorzej, stworzy" Iterator "dwa razy w pętli. Po pierwsze, aby ustalić, czy są jeszcze jakieś elementy, a następnie, aby uzyskać następny element. – dkiselev

1

jeśli detailJSON jest zmienna mapa, to czy używasz detailJSON.clear() sposób opróżnić wartości w mapie.

+0

jest zmienną JSONObject. – inquisitive

+0

następnie detailJSON = new JSONObject() powinien usunąć wszystkie poprzednie dane i wstawi i opróżni obiekt detailJSON dla ciebie –

+0

'detailJSON = new JSONObject()' nie zadziała, jeśli 'detailJSON' zostanie zadeklarowany jako' final', więc tylko komentarz odnosi się do konkretnego przypadku użycia. –

1

Możesz, ale to będzie hack.

Iterator i = detailJSON.keys(); 
while(i.hasNext()) { 
    i.next().remove(); 
} 

//or 

detailJSON.keySet().clear(); 

To działa, ponieważ JSONObject.keySet() zwróci Ci this.map.keySet(). I co JavaDoc dla HashMap.keySet() powiedział:

Powoduje powrót do widoku Set kluczy zawartych na tej mapie. Zestaw jest wspierany przez mapę, więc zmiany na mapie są odzwierciedlone w zestawie i na odwrót.

Java HashMap ze zbiorów zwróci Ci java.util.HashMap.KeySet i java.util.HashMap.KeySet.clear(); po prostu wywołuje map.clear() (Keyset jest wewnętrzna klasa java.util.HashMap)

+0

'detailJSON.keySet(). Clear();' nie działa, daje ten błąd kompilacji - ' Metoda keySet() jest niezdefiniowana dla typu JSONObject'. Wypróbowanie pierwszego rozwiązania teraz – inquisitive

+0

Pierwszy z nich również daje błąd, aby dodać rzutowany typ do iteratora, po wykonaniu tego daje błąd czasu wykonywania. – inquisitive

+0

Whch JSONObject używasz. Przetestowałem to podejście z fragmentem http://pastebin.com/SBDR3iaB – dkiselev

1

można użyć tej metody

public HashMap clearMap(HashMap detailJSON){ 
    for(String key: detailJSON.keySet()) 
    detailJSON.remove(key); 
    return detailJSON; 
} 
1

ta wersja ma narzut z powodu otrzymania zestawu kluczy za każdym razem, ale działa bez wyjątku modyfikacji współbieżnych.

while(json.length()>0) 
    json.remove(json.keys().next()); 
Powiązane problemy