2015-07-06 9 views
6

ich ein JSON-Objekt wie diese füllen müssen, lassen Sie sagen, es detailJSON gestattet:Gibt es eine Möglichkeit, ich die ganze JSONObject entleeren - java

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

ich es auf diese Weise tun:

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

Danach wird das Detail in einigen gemeinsamen Einstellungen eingetragen, und ich mag jetzt klar diese JSONObject und verwendet das gleiche detailJSON Objekt ein anderes json zu speichern (mit verschiedenen Schlüsseln), auf diese Weise:

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

Ich weiß, es gibt eine Methode, remove(), die den bestimmten Schlüssel und den entsprechenden Wert entfernt.

Das funktioniert:

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

und dann verwenden -

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

Nun ist dies ein sehr einfaches Beispiel. In dem Code, an dem ich gerade arbeite, habe ich viele Schlüssel, also erhöht die Verwendung von remove das LOC. Auch jedes Mal vor dem Entfernen muss ich überprüfen, ob JSONObject has diesen bestimmten Schlüssel oder nicht.

Gibt es eine andere Möglichkeit, kann ich Clearing des JSONObject implementieren?

Ich versuchte

detailJSON=null ; 
detailJSON=new JSONObject(); 

Aber es funktioniert nicht.

Ich bin im Grunde auf der Suche nach etwas wie clear() -Methode, falls vorhanden.

+1

Sind Sie sicher, dass Sie das tun müssen? Warum nicht jedes Mal ein neues JSONObject verwenden? Ich denke, es wäre teurer, jedes einzelne Feld zu entfernen, als nur ein neues zu erstellen. –

+0

@UweAllner Auch ich stimme Ihnen vollkommen zu, aber das ist die Geschäftsbeschränkung, eine solche Struktur aufrechtzuerhalten. – inquisitive

+0

'detailJSON = neues JSONObject();' sollte funktionieren. Sie scheinen irgendwo in Ihrem Code einen Fehler zu haben. – Philipp

Antwort

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

Dies ergibt einen Kompilierungsfehler - 'Kann nur über ein Array oder eine Instanz von java.lang.Iterable' in der Zeile detailJSON.keys() iterieren. DetailJSON ist eine Instanz von JSONObject. – inquisitive

+0

Nun, nachdem Sie bearbeitet haben, funktioniert das, ich musste in String string - 'detailJSON.remove ((String) detailJSON.keys(). Next());' – inquisitive

+0

Aber es ist im Grunde das gleiche wie 'detailJSON.remove ("Menge"); "noch schlimmer, es wird' Iterator' zweimal pro Schleife erzeugen. Zuerst müssen Sie feststellen, ob weitere Elemente vorhanden sind und danach das nächste Element. – dkiselev

1

wenn detailJSON eine Karte Variable ist, können die Sie detailJSON.clear() Methode verwenden, um Werte in der Karte zu leeren.

+0

es ist JSONObject Variable. – inquisitive

+0

dann detailJSON = new JSONObject() sollte alle Ihre vorherigen Daten entfernen und wird DetailJSON-Objekt für Sie setzen und leeren –

+0

'detailJSON = new JSONObject()' würde nicht funktionieren, wenn 'detailJSON' als' final' deklariert wird, so dass nur Kommentar bezieht sich auf einen bestimmten Anwendungsfall. –

1

Sie könnten, aber es wird ein Hack sein.

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

//or 

detailJSON.keySet().clear(); 

Es funktioniert, weil JSONObject.keySet() werden Sie this.map.keySet() zurück. Und was JavaDoc für HashMap.keySet() sagte:

Gibt eine Set Blick auf die in dieser Karte enthaltenen Schlüssel. Das Set wird durch die Map unterstützt, sodass Änderungen an der Map in der Menge widergespiegelt werden und umgekehrt.

Java HashMap von Sammlungen finden Sie java.util.HashMap.KeySet zurückkehren und java.util.HashMap.KeySet.clear(); nur Anrufe map.clear() (KeySet ist eine innere Klasse von java.util.HashMap)

+0

'detailJSON.keySet(). Clear();' funktioniert nicht, es gibt diesen Kompilierungsfehler - ' Die Methode keySet() ist nicht definiert für den Typ JSONObject'. Versuchen Sie die erste Lösung jetzt – inquisitive

+0

Die erste gibt auch einen Fehler, um den Typ Cast Iterator hinzufügen, nachdem dies getan, gibt es Laufzeitfehler. – inquisitive

+0

Welches JSONObject verwenden Sie? Ich habe diesen Ansatz mit Snippet http://pastebin.com/SBDR3iaB getestet – dkiselev

1

Sie diese Methode

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

diese Version verwenden können hat einen Overhead, weil der Schlüsselsatz jedes Mal abgerufen wird, aber es funktioniert ohne gleichzeitige Modifikationsausnahme.

while(json.length()>0) 
    json.remove(json.keys().next()); 
Verwandte Themen