web-dev-qa-db-fra.com

Peut-on citer des numéros JSON?

Peut-il y avoir des citations autour des nombres JSON? Dans la plupart des liens de recherche, il semble que les chiffres ne nécessitent pas de guillemets. Mais, les analyseurs doivent-ils accepter à la fois "attr" : 6 Et "attr" : "6"?

Si MyParser a une méthode getInt pour obtenir un nombre donné la clé, devrait MyParser.getInt("attr") retourner 6 Dans les deux cas, ou lever une exception dans ce dernier Cas?

36
Unreal user

Dans JSON , 6 est le numéro six. "6" est une chaîne contenant le chiffre 6. Donc la réponse à la question "Les nombres json peuvent-ils être cités?" est fondamentalement "non", parce que si vous les mettez entre guillemets, ils ne sont pas plus de chiffres.

Mais, les analyseurs doivent-ils accepter à la fois "attr": 6 et attr: "6"?

Le deuxième exemple n'est pas valide, car attr doit être entre guillemets, par exemple:

{"attr": "6"}

... est valide et définit un objet avec une propriété nommée attr avec la chaîne valeur "6", tandis que:

{"attr": 6}

... est valide et définit un objet avec une propriété appelée attr avec la valeur numérique 6, et enfin:

{attr: 6}

...et

{attr: "6"}

... sont tous deux JSON non valides car les noms de propriété doivent être entre guillemets.

Si MyParser a une méthode getInt pour obtenir un nombre donné la clé, MyParser.getInt ("attr") doit-il retourner 6 dans les deux cas ou lever une exception dans le dernier cas?

C'est une décision de conception pour la personne fournissant l'analyseur, essentiellement le choix entre getInt étant strict (levant une exception si vous l'essayez sur "attr": "6") ou lâche (contrainte "6" à 6 et le renvoyer). JavaScript est généralement lâche, et il pourrait donc y avoir un argument pour être lâche; à l'inverse, le fait que JavaScript soit lâche cause parfois des problèmes, ce qui pourrait être un argument pour être strict.

72
T.J. Crowder

Cela dépendra du langage que vous utilisez pour obtenir l'entier, car si le langage de programmation ne fournit pas de conversion implicite de chaîne en entier, vous pouvez avoir des problèmes.

Ne vous inquiétez pas trop, car le langage de programmation moderne peut de nos jours implicitement convertir une chaîne en nombre sans code supplémentaire. Vous devez prendre en considération, lorsque vous utilisez des langages de programmation comme JavaScript, lorsque vous utilisez == et === lors de la comparaison des valeurs, === prend en compte le type de la valeur tandis que == non, donc 6 === "6" renverra false, tandis que 6 == "6" renverra true.

Répondant à votre question, il ne lèvera pas d'exception si vous utilisez un langage de programmation qui fournit une conversion implicite de chaîne en entier.

4
scubaFun