2010-03-30 14 views
5

Hallo Ich möchte ein JSON-Array erstellen.Wie erstelle ich ein JSON-Array?

ich verwendet haben versucht:

JSONArray jArray = new JSONArray(); 
    while(itr.hasNext()){ 
    int objId = itr.next(); 
jArray.put(objId, odao.getObjectName(objId)); 
    } 
results = jArray.toString(); 

Hinweis: odao.getObjectName(objId) ruft einen Namen auf dem "Objekt-ID" auf der Grundlage der objId genannt wird.

Allerdings bekomme ich eine sehr komisch aussehende Array wie

[null,null,null,"SomeValue",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"AnotherValue",null,null,null,null,null,null,null,null,null,null,"SomethingElse","AnotherOne","LastOne"] 

nur mit „Lastone“ angezeigt wird, wenn ich es jQuery Verwendung abgerufen werden.

sollte das Array aussieht

{[ "3": "EinWert"], [ "40": "another"], [ "23": "somethingelse"], [ "9" : "AnotherOne"]

Die Zahlen werden aus irgendeinem Grund in dem Array, das ich bekomme, überhaupt nicht angezeigt.

+0

Sie haben ein JSON-Objekt von JSON-Arrays? –

+1

Was immer Sie bekommen, sollte es nicht so aussehen. Arrays sind [foo, bar, baz], während Objekte {"foo": "value", "bar": "value", "baz": "value"} sind. Du scheinst deine {} und [] verwirrt zu haben. – Quentin

+1

Danke an alle, ich habe von jeder Antwort etwas bekommen.Am Ende wurde mir klar, dass meine Frage nicht genau so formuliert wurde, wie es hätte sein sollen, aber deine Antworten haben mein Problem gelöst. – Ankur

Antwort

12

für Ihre schnelle Lösung:

JSONArray jArray = new JSONArray(); 
while (itr.hasNext()) { 
    JSONObject json = new JSONObject(); 
    int objId = itr.next(); 
    json.put(Integer.toString(objId), odao.getObjectName(objId)); 
    jArray.put(json); 
} 

results = jArray.toString(); 

Basierend auf T. J. Crowder's response, meine Lösung tut dies:

[{"3":"SomeValue"}, 
{"40":"AnotherValue"}, 
{"23":"SomethingElse"}, 
{"9":"AnotherOne"}, 
{"1":"LastOne"} 
] 

Siehe Jim Blackler Kommentar von dem, was man falsch machen.

+0

danke, du hast meinen tag gerettet. –

8

Der Schlüssel ist in der Dokumentation für JSONArray für Methode put (int index, String-Wert)

Wenn der Index größer ist als die Länge des JSONArray, dann null Elemente seines nach Bedarf hinzugefügt, um pad es aus.

+0

Ich sehe so der Index ist buchstäblich der Index des Array und nicht irgendein Wert, den ich zuweisen kann. – Ankur

+0

@Ankur: Ja, es ist ein Array im numerischen Index-Array Sinn, keine Karte (aka Dictionary aka assoziative Array). Sie können JSONObject (http://www.json.org/javadoc/org/json/JSONObject.html) für eine Karte verwenden. Die Schlüssel in JSON-Objekten sind immer Strings, also müssen Sie einen String aus Ihrer 'objId' machen, aber das ist einfach genug. –

2

Was Sie für "Das Objekt sollte wie aussehen" angegeben haben, ist ungültiger JSON. Es ist ein Objekt (durch { und } abgegrenzt), aber dann hat es Werte, die keine Schlüssel haben. Siehe json.org für die Syntax von JSON.

Wenn Sie dies:

{"3":"SomeValue", 
"40":"AnotherValue", 
"23":"SomethingElse", 
"9":"AnotherOne", 
"1":"LastOne" 
} 

... verwenden JSONObject statt, und schalten Sie Ihre objId s in einen Schlüssel, wenn die Einträge bei der Umsetzung, zB:

JSONObject obj = new JSONObject(); 
while(itr.hasNext()){ 
    int objId = itr.next(); 
    obj.put(String.valueOf(objId), odao.getObjectName(objId)); 
} 
results = obj.toString(); 

Wenn Sie dies wollen:

[{"3":"SomeValue"}, 
{"40":"AnotherValue"}, 
{"23":"SomethingElse"}, 
{"9":"AnotherOne"}, 
{"1":"LastOne"} 
] 

... siehe The Elite Gentleman's answer (das ist ein JSONArray von JS ONObjects).

+1

Bis wir wissen, was er wirklich will, ist jede Antwort hier richtig. –

+1

@Elite: In der Tat. –

+1

@Die Elite Gentleman: Es ist ein er :) – Ankur