Faites les clés JSON doivent être entourés par des guillemets?
-
09-09-2019 - |
Question
Exemple: Le code suivant valide contre la 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 guillemets autour de leurs clés dans leurs exemples.
La solution
Oui, vous avez besoin de guillemets. Est de rendre plus simple et d'éviter d'avoir à une autre méthode d'échappement pour javascript mots-clés réservés, à savoir {for:"foo"}
.
Autres conseils
Vous avez raison d'utiliser des chaînes comme la clé. Voici un extrait de RFC 4627 - L'application / JSON Type de support pour JavaScript Object Notation (JSON)
2.2. Objets
Une structure d'objet est représenté par une paire d'accolades zéro ou plusieurs paires nom / valeur environnantes (ou des membres). Un nom est chaîne . Un colon unique vient après chaque nom, le nom de séparation à partir de la valeur. Une virgule sépare une valeur à partir d'une suite Nom. Les noms dans un objet doit être unique.
object = begin-object [ member *( value-separator member ) ] end-object
member = string name-separator value
[...]
2,5. Cordes
La représentation des chaînes est similaire aux conventions utilisées dans le C famille des langages de programmation. Une chaîne commence et se termine par guillemets. [...]
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
De 2.2. Objets
Une structure d'objet est représenté par une paire d'accolades autour de zéro ou plusieurs paires nom / valeur (ou des membres). Un nom est une chaîne.
et de 2,5. Cordes
Une chaîne commence et se termine par des guillemets.
Je dirais donc que, selon la norme: oui, vous devez toujours indiquer la clé (bien que certains parseurs peuvent être plus indulgents)
Oui, les guillemets sont obligatoires. http://json.org/ dit:
string
""
" chars "
Puisque vous pouvez mettre « parent.child » notation en pointillé et vous ne devez pas mettre parent [ « enfant »] qui est aussi valable et utile, je dirais que les deux sens est techniquement acceptable. Les parseurs tous devraient faire les deux sens très bien. Si votre analyseur n'a pas besoin de guillemets sur les clés alors il est probablement préférable de ne pas les mettre (gain de place). Il est logique de les appeler des chaînes parce que c'est ce qu'ils sont, et que les crochets vous donne la possibilité d'utiliser des valeurs pour les clés essentiellement il est parfaitement logique de ne pas. JSON vous pouvez mettre ...
>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};
>obj
Object {someKey: "someValue"}
juste bien sans problèmes, si vous avez besoin d'une valeur pour une clé et aucune cité ne fonctionnera pas, si elle n'a pas, vous ne pouvez pas, vous ne serez pas si « vous n'avez pas besoin de devis sur clés". Même si elle a raison de dire qu'ils sont techniquement des chaînes. La logique et l'utilisation Prétendre le contraire. Ni elle ne officiellement sortie Object { « someKey »: « someValue »}. Pour obj dans notre exemple courir à partir de la console d'un navigateur