web-dev-qa-db-fra.com

Les clés JSON doivent-elles être entourées de guillemets?

Exemple: le code suivant est-il valide par rapport à JSON Spec ?

{
    precision: "Zip"
}

Ou devrais-je toujours utiliser la syntaxe suivante? (Et si oui, pourquoi?)

{
    "precision": "Zip"
}

Je n'ai pas vraiment trouvé quelque chose à ce sujet dans les spécifications JSON. Bien qu'ils utilisent des citations autour de leurs clés dans leurs exemples.

212

Oui, vous avez besoin de guillemets. Cela simplifie les choses et évite de recourir à une autre méthode d'échappement pour les mots clés réservés javascript, à savoir {for:"foo"}.

131
cobbal

Vous avez raison d'utiliser des chaînes comme clé. Voici un extrait de RFC 4627 - Le type de support application/json pour la notation d'objet JavaScript (JSON)

2.2. Objets

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

object = begin-object [ member *( value-separator member ) ] end-object

member = string name-separator value

[...]

2.5. Les cordes

La représentation des chaînes est similaire aux conventions utilisées dans la famille de langages de programmation C. Une chaîne commence et finit par des guillemets. [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

Lire le RFC entier ici .

130
PatrikAkerstrand

De 2.2. Objets

Une structure d'objet est représentée par une paire d'accolades entourant zéro ou plusieurs paires nom/valeur (ou membres). Un nom est une chaîne.

et de 2.5. Cordes

Une chaîne commence et finit par des guillemets.

Donc, je dirais que selon le standard: oui, vous devriez toujours citer la clé (même si certains analyseurs peuvent être plus indulgents)

12
Cebjyre

Oui, les devis sont obligatoires. http://json.org/ dit:

string
    ""
    " chars "
6
lutz