2010-03-30 28 views
5

Witam Chcę utworzyć tablicę JSON.Jak utworzyć macierz JSON?

Próbowałem, używając:

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

Uwaga: odao.getObjectName(objId) pobiera nazwę opartą na "obiekt id", który nazywa objId.

Jednak mam bardzo zabawne patrząc tablicę jak

[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"] 

Z tylko „Lastone” jest wyświetlany, kiedy pobrać go za pomocą jQuery.

Array powinien wyglądać

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

Numery nie pojawiają się w ogóle z jakiegoś powodu w tablicy, którą otrzymuję.

+0

Masz macierz JSON z JSON? –

+1

Cokolwiek otrzymasz, nie powinno tak wyglądać. Tablice to [foo, bar, baz], podczas gdy obiekty to {"foo": "value", "bar": "value", "baz": "value"}. Wygląda na to, że twoje {} i [] są zdezorientowane. – Quentin

+1

Dziękuję wszystkim, mam coś z każdej odpowiedzi.W końcu zrozumiałem, że moje pytanie nie zostało wyrażone dokładnie tak, jak powinno, ale twoje odpowiedzi rozwiązały mój problem. – Ankur

Odpowiedz

12

Dla Państwa szybkie rozwiązanie:

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(); 

podstawie T. J. Crowder's response, moje rozwiązanie to robi:

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

Patrz komentarz Jim Blackler za co robisz źle.

+0

dzięki, uratowałeś mi dzień. –

8

Wskazówkę w dokumentacji JSONArray dla metody put (int indeksu wartości łańcuchach)

Jeżeli współczynnik jest większy od długości JSONArray, a elementy puste będzie dodaje się jako niezbędne wyłóż to.

+0

Widzę, że indeks jest dosłownie indeksem tablicy, a nie jakąś wartością, którą mogę przypisać. – Ankur

+0

@Ankur: Tak, jest to tablica w sensie tablicy liczbowo-indeksowej, a nie mapa (zwana też aka tablicą asocjacyjną). Możesz użyć JSONObject (http://www.json.org/javadoc/org/json/JSONObject.html) dla mapy; klucze w obiektach JSON są zawsze ciągami, więc musisz utworzyć ciąg z 'objId', ale to dość łatwe. –

2

To, co cytowałeś dla twojego "Obiekt powinien wyglądać" jest nieprawidłowym JSON. Jest to obiekt (ograniczony przez { i }), ale ma w nim wartości, które nie mają żadnych kluczy. Zobacz json.org dla składni JSON.

Jeśli chcesz to:

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

... JSONObject zamiast używać, i włączyć objId s do kluczy, gdy umieszczenie wpisów, np:

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

Jeśli chcesz w ten sposób:

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

... patrz The Elite Gentleman's answer (to JSONArray of JS ONObjects).

+1

Dopóki nie wiemy, czego on naprawdę chce, każda odpowiedź tutaj jest prawidłowa. –

+1

@Elite: Rzeczywiście. –

+1

@ Elite Gentleman: To jest on :) – Ankur

Powiązane problemy