2013-04-29 17 views
5

Sto cercando di creare una stringa json in java utilizzando la libreria org.json e il seguente è lo snippet di codice.Creazione di JSON in java con org.json

JSONArray jSONArray = new JSONArray(); 
JSONObject jSONObject = new JSONObject(); 
jSONObject.accumulate("test", jSONArray); 
System.out.println(jSONObject.toString()); 

mi aspettavo di stampare

{"test":[]} 

mentre la stampa

{"test":[[]]} 

risposta

9

invece di utilizzare accumulate utilizzo put questo modo ha vinto; t aggiungerlo a una pre-esistente (o crea e aggiungi) JSONArray, ma aggiungilo come chiave per JSONObject in questo modo:

JSONArray array = new JSONArray(); 
JSONObject obj = new JSONObject(); 
obj.put("test", array); 
System.out.println(obj.toString()); 

e ora è lo stamperemo {"test":[]}

2

Questo è perché nel metodo accumulate,

Object object = this.opt(key); //gets the key value. Null in your case. 
if (object == null) { 
    this.put(key, 
     value instanceof JSONArray ? new JSONArray().put(value) : value); 
} 

Questo è secondo l'API, che dice chiaramente (per il metodo accumulate) -

Accumula valori sotto chiave. È simile al metodo put eccetto che se c'è già un oggetto memorizzato sotto la chiave, allora un JSONArray viene memorizzato sotto la chiave per contenere tutti i valori accumulati . Se esiste già un JSONArray, il nuovo valore è aggiunto a . Al contrario, il metodo put sostituisce il precedente valore . Se viene accumulato un solo valore che non è un JSONArray, allora il risultato sarà lo stesso dell'utilizzo di put. Ma se più valori sono accumulati, , il risultato sarà simile ad append.

È possibile utilizzare put() come indicato nell'altra risposta, per il risultato desiderato.

Problemi correlati