¿Las claves JSON deben ser únicas?

La siguiente pregunta está relacionada con una pregunta que hice antes: Ayuda para analizar el JSON simple (usando JSON para JAVA ME)

¿Las claves JSON deben ser únicas? Por ejemplo, tuve problemas para analizar el siguiente XML (con JSON ME):

{"name" : "JACK","name" : "JILL","name" : "JOHN","name" : "JENNY","name" : "JAMES","name" : "JIM"} 

Y, aparentemente, es porque las claves deben ser únicas. Me pregunto si eso es cierto en todos los casos o no. Por ejemplo, si estuviera usando algo que no sea JSON ME, ¿podría analizar todos estos nombres?

Gracias.

No hay un “error” si usa más de una clave con el mismo nombre, pero en JSON, la última clave con el mismo nombre es la que se va a usar.

En su caso, la clave “nombre” sería mejor para contener una matriz como su valor, en lugar de tener un número de claves “nombre”. No tiene mucho sentido que el mismo objeto o “cosa” tenga dos nombres, o dos de las mismas propiedades que están en conflicto.

P.ej:

 { "name" : [ "JOHN", "JACK", "...", ... ] } 

De RFC 4627 :

Una estructura de objeto se representa como un par de llaves que rodean cero o más pares de nombre / valor (o miembros). Un nombre es una cadena. Un solo punto aparece después de cada nombre, separando el nombre del valor. Una coma individual separa un valor de un nombre siguiente. Los nombres dentro de un objeto DEBERÍAN ser únicos.

jQuery es capaz de analizarlo. Pero si intenta acceder, solo devuelve el último valor.

Consulte http://jsfiddle.net/MQmM4/2/

Por lo tanto, es analizable, supongo, pero el valor queda anulado si usa la misma clave.

aquí hay una solución posible usando array. solo usa el índice de matriz

 the_json_array.getJSONObject(0); {"nameList": [{"name" : "JACK"}, {"name" : "JILL"}, {"name" : "JOHN"}, {"name" : "JENNY"}, {"name" : "JAMES"}, {"name" : "JIM"}]} 

Un objeto JSON se parece a lo siguiente

 public JSONObject(Map< ?, ?> map) { this.map = new HashMap(); if (map != null) { for (final Entry< ?, ?> e : map.entrySet()) { final Object value = e.getValue(); if (value != null) { this.map.put(String.valueOf(e.getKey()), wrap(value)); } } } } 

Un objeto JSON es básicamente un hashmap que contiene un par de valores clave.

Es por eso que te sobrescriben cada vez. Para evitar esto

  1. O bien debe tener valores clave únicos
  2. O debería envolver el par de valores clave como objetos individuales en una matriz

Eche un vistazo a esta implementación java JSON Object para conocer en profundidad acerca de JSON.