web-dev-qa-db-fra.com

Les clés JSON doivent-elles être uniques?

La question suivante est liée à une question que j'avais posée plus tôt: Aide à l'analyse de JSON simple (en utilisant JSON pour Java ME)

Les clés JSON doivent-elles être uniques? Par exemple, j'avais du mal à analyser le XML suivant (avec JSON ME):

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

Et, apparemment, c'est parce que les clés doivent être uniques. Je me demande simplement si c'est vrai dans tous les cas ou non. Par exemple, si j'utilisais autre chose que JSON ME, serais-je capable d'analyser tous ces noms?

Merci.

30
littleK

Il n'y a pas "d'erreur" si vous utilisez plusieurs clés avec le même nom, mais en JSON, la dernière clé avec le même nom est celle qui va être utilisée.

Dans votre cas, la clé "nom" serait préférable de contenir un tableau tel que sa valeur, au lieu d'avoir un certain nombre de clés "nom". Il n'est pas très logique que le même objet ou la "chose" ait deux noms, ou deux des mêmes propriétés qui sont en conflit.

Par exemple.:

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

De RFC 4627 :

Une structure d'objet est représentée par une paire de crochets entourant zéro ou plusieurs paires nom/valeur (ou membres). Un nom est une chaîne. Un deux-points vient après chaque nom, séparant le nom de la valeur. Une seule virgule sépare une valeur d'un nom suivant. Les noms dans un objet DEVRAIENT être uniques.

24
jhanschoo

voici une solution possible en utilisant un tableau. utilisez simplement l'index du tableau

the_json_array.getJSONObject(0);


{"nameList":
[{"name" : "JACK"},
{"name" : "JILL"},
{"name" : "JOHN"},
{"name" : "JENNY"},
{"name" : "JAMES"},
{"name" : "JIM"}]}
3
jeet.chanchawat

jQuery est capable de l'analyser. Mais si vous essayez d'y accéder, cela ne fait que rendre la dernière valeur.

Découvrez http://jsfiddle.net/MQmM4/2/

Donc, c'est analysable, je suppose, mais la valeur est remplacée si vous utilisez la même clé.

3
Bala R

Un objet JSON ressemble à ce qui suit

public JSONObject(Map<?, ?> map) {
    this.map = new HashMap<String, Object>();
    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 objet JSON est fondamentalement une table de hachage contenant une paire valeur/clé.

C'est pourquoi vous êtes écrasé à chaque fois. Pour éviter cela

  1. Soit vous devez avoir des valeurs clés uniques
  2. Ou vous devez encapsuler la paire clé-valeur en tant qu'objets individuels dans un tableau

Jetez un œil à ceci Objet JSON Java pour connaître en profondeur JSON.

1
rm -rf star