2010-03-30 26 views
5

Hola, quiero crear una matriz JSON.¿Cómo creo una matriz JSON?

He intentado usar:

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

Nota: odao.getObjectName(objId) recupera un nombre basado en el "ID de objeto" que se llama ObjID.

Sin embargo puedo obtener una matriz que parece muy divertido como

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

Con solamente "LASTONE" se muestra cuando puedo recuperarlo utilizando jQuery.

La matriz debe ser similar

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

Los números no aparecen en absoluto por algún motivo en la matriz que obtengo.

+0

Tiene un objeto JSON de matrices JSON? –

+1

Lo que sea que obtenga, no debería verse así. Las matrices son [foo, bar, baz] mientras que los objetos son {"foo": "valor", "barra": "valor", "baz": "valor"}. Parece que tienes {} y [] confundidos. – Quentin

+1

Gracias a todos, obtuve algo de cada respuesta.Al final me di cuenta de que mi pregunta no se expresó exactamente como debería haber sido, pero sus respuestas resolvieron mi problema. – Ankur

Respuesta

12

Para su Solución rápida:

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

Basado en T. J. Crowder's response, mi solución hace esto:

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

Consulte el comentario de Jim Blackler de lo que estás haciendo mal.

+0

gracias, me salvaste el día. –

8

La pista está en la documentación de JSONArray para método put (int index, valor de cadena)

Si el índice es mayor que la longitud de la JSONArray, a continuación, elementos nulos serán añadió como sea necesario para Rellenarlo.

+0

Veo que el índice es literalmente el índice de la matriz y no algún valor que pueda asignar. – Ankur

+0

@Ankur: Sí, es una matriz en el sentido de matriz de índice numérico, no un mapa (también conocido como asociación asociativa de diccionario). Puede usar JSONObject (http://www.json.org/javadoc/org/json/JSONObject.html) para obtener un mapa; las claves en los objetos JSON son siempre cadenas, por lo que necesitarás hacer una cadena de tu 'objId', pero eso es bastante fácil. –

2

Lo que ha citado para su "El objeto debería verse" no es JSON válido. Es un objeto (delimitado por { y }) pero tiene valores dentro de él que no tienen ninguna clave. Ver json.org para la sintaxis de JSON.

Si desea que esta:

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

... JSONObject utilizar en su lugar, y convertir su objId s en claves al poner las entradas en, por ejemplo:

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

Si desea que esta:

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

... ver The Elite Gentleman's answer (que es un JSONArray de JS ONObjects).

+1

Hasta que sepamos lo que él/ella realmente quiere, cada respuesta aquí es correcta. –

+1

@Elite: De hecho. –

+1

@The Elite Gentleman: Es un él :) – Ankur