2013-04-29 19 views
5

Próbuję utworzyć ciąg json w java przy użyciu biblioteki org.json, a następnie jest fragment kodu.Tworzenie JSON w java przy użyciu org.json

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

Spodziewałem go wydrukować

{"test":[]} 

natomiast drukuje

{"test":[[]]} 

Odpowiedz

9

zamiast korzystania accumulate korzystanie put ten sposób wygrałem; t go dodać do istniejącej wcześniej (lub Utwórz i dodaj) JSONArray, ale dodaj go jako klucz do JSONObject w ten sposób:

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

a teraz będziemy drukować {"test":[]}

2

To dlatego, że w metodzie 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); 
} 

To jak na API, które wyraźnie mówi (dla metody accumulate) -

Gromadzenie wartości pod kluczem. Jest podobny do metody put z wyjątkiem , że jeśli istnieje już obiekt przechowywany pod kluczem, to pod kluczem przechowywana jest JSONArray, w celu przechowywania wszystkich zakumulowanych wartości . Jeśli istnieje już JSONArray, nowa wartość to dołączona do niego. Natomiast metoda put zastępuje poprzednią wartość . Jeśli zgromadzona jest tylko jedna wartość, która nie jest JSONArray, to wynik będzie taki sam jak przy użyciu put. Ale jeśli zgromadzono wiele wartości , wynik będzie podobny do dołączenia.

Możesz użyć put(), jak wspomniano w drugiej odpowiedzi, dla pożądanego rezultatu.

Powiązane problemy