2010-03-30 38 views
5

Merhaba Bir JSON dizisi oluşturmak istiyorum. Ben kullanarak denediJSON Array nasıl oluşturulur?

:

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

Not: odao.getObjectName(objId) ObjID denir "nesne kimliği" dayalı bir ad alır.

Ancak ben bunun jQuery kullanarak aldığınız zaman sadece "LaStone" görüntülenmesini ile

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

gibi çok komik görünümlü dizi olsun. ,:

Dizi

{[ "someValue" "3"] gibi olmalıdır [ "40", "anotherValue"], [ "23", "olarak başka şeyler"], [ "9" : "AnotherOne"], ["1": "LastOne"]}

Sayılar, alışık olduğum dizinin bir nedeni için hiç gösterilmiyor.

+0

JSON Dizileri JSON dizileriniz var mı? –

+1

Ne alırsanız alın, böyle görünmemelidir. Nesneler [foo, bar, baz] iken nesneler {"foo": "value", "bar": "value", "baz": "value"}. {} Ve [] kafanızın karışmış görünüyorsunuz. – Quentin

+1

Herkese teşekkürler, her cevaptan bir şey aldım.Sonunda, sorumun tam olarak olması gerektiği gibi ifade edilmediğini fark ettim, ama cevaplarınız benim problemimi çözdü. – Ankur

cevap

12

:

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

T. J. Crowder's response dayanarak, benim çözüm yapar:

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

yanlış yaptığını Jim Blackler yorumuna bakınız.

+0

teşekkürler, günümü kurtardın. –

8

ipucu yöntemi koymak için JSONArray (int indeksi, dize değeri)

göstergesi JSONArray uzunluğundan büyükse belgelerinde ise, o zaman boş elemanlar için gerektiği kadar ilave olacak pes et. hızlı Çözüm İçin

+0

Sanırım dizin tam anlamıyla Array'ın indisi ve atayabileceğim bir değer değil. – Ankur

+0

@Ankur: Evet, sayısal indeks dizisi anlamında bir dizi, bir harita değil (aka aka akaative array dizisi). JSONObject'i (http://www.json.org/javadoc/org/json/JSONObject.html) bir harita için kullanabilirsiniz; JSON nesnesindeki tuşlar her zaman dizgidir, bu yüzden 'objId 'öğenizden bir dize oluşturmanız gerekir, ancak bu yeterince kolaydır. –

2

"Nesne gibi görünmelidir" ifadeniz geçersiz JSON. Bu bir nesnedir ({ ve } ile sınırlandırılmıştır), ancak içinde hiç anahtar bulunmayan değerlere sahiptir. JSON'un sözdizimi için bkz. json.org.

Bunu isterseniz:, girişleri koyarak zaman

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

... yerine JSONObject kullanın ve tuşların içine objId s çevirmek örn:

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

Bunu isterseniz:

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

... bkz The Elite Gentleman's answer (yani JS bir JSONArray var ONObjects).

+1

Gerçekten ne istediğini bilmeden, buradaki her cevap doğrudur. –

+1

@Elite: Gerçekten. –

+1

@ Elite Beyefendi: Bu bir o :) – Ankur