Exemple: le code suivant est-il valide par rapport à la spécification JSON ?
{
precision: "zip"
}
Ou dois-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 guillemets autour de leurs clés dans leurs exemples.
json
specifications
standards-compliance
json5
christianvuerings
la source
la source
Vous avez raison d'utiliser des chaînes comme clé. Voici un extrait de RFC 4627 - Le type de média application / json pour la notation d'objet JavaScript (JSON)
Lisez l'intégralité du RFC ici .
la source
A string begins and ends with quotation marks.
.À partir de 2.2. Objets
et à partir de 2,5. Cordes
Je dirais donc que selon la norme: oui, vous devez toujours citer la clé (même si certains analyseurs peuvent être plus indulgents)
la source
Oui, les devis sont obligatoires. http://json.org/ dit:
la source
Oui, ils le font. Mais si vous en avez besoin autrement, passez à la caisse JSON5 .
JSON5 est un sur-ensemble de JSON qui permet la syntaxe ES5, notamment:
L'implémentation de référence JSON5 (
json5
package npm ) fournit unJSON5
objet doté de méthodesparse
etstringify
d'arguments et de sémantiques identiques à l'JSON
objet intégré .la source
Puisque vous pouvez mettre la notation pointée "parent.child" et que vous n'avez pas besoin de mettre parent ["enfant"] qui est également valide et utile, je dirais que les deux façons sont techniquement acceptables. Les analyseurs devraient tous faire très bien dans les deux sens. Si votre analyseur n'a pas besoin de guillemets sur les clés, il est probablement préférable de ne pas les mettre (économise de l'espace). Il est logique de les appeler chaînes car c'est ce qu'elles sont, et puisque les crochets vous donnent la possibilité d'utiliser des valeurs pour les touches, il est parfaitement logique de ne pas le faire. Dans Json, vous pouvez mettre ...
très bien sans problèmes, si vous avez besoin d'une valeur pour une clé et aucune citation ne fonctionnera pas, donc si ce n'est pas le cas, vous ne pouvez pas, donc vous n'aurez pas "vous n'avez pas besoin de guillemets sur les clés". Même s'il est juste de dire que ce sont techniquement des cordes. La logique et l'utilisation soutiennent le contraire. Il ne génère pas non plus officiellement l'objet {"someKey": "someValue"} pour obj dans notre exemple, exécuté à partir de la console de n'importe quel navigateur.
la source
obj
dans la console, le navigateur affiche une représentation lisible par l'homme de l'objet. Il peut l'afficher en tant que littéral d'objet (comme il l'a fait dans votre exemple), ou il peut utiliser une autre représentation, même interactive. Les littéraux d'objets JavaScript ne nécessitent pas de guillemets autour d'un nom de clé si la clé est un identifiant valide et non un mot réservé. Cependant, JSON requiert toujours des guillemets autour des noms de clés.obj
dans la console, essayezJSON.stringify(obj)
. Vous verrez maintenant une représentation JSON valide de l'objet, avec le nom de clé entre guillemets. Inversement, pour voir si une chaîne est du JSON valide, essayezJSON.parse(string)
. Si les clés ne sont pas citées, cela lèvera une exception. Par exemple,JSON.parse('{"a":"b"}')
réussira, maisJSON.parse('{a:"b"}')
échouera.var obj = {[keyName]:"someValue"};
est très intéressante! Je ne savais pas que vous pouviez le faire dans un objet JavaScript littéral. Un peu de vérification montre que c'est quelque chose de nouveau dans ES6 - vous ne pouvez pas le faire dans ES5.