Au moment de la rédaction, JSON a été entièrement décrit dans RFC4627. Il décrit (au début de "2") au format JSON texte comme un objet sérialisé ou d'un tableau.
Cela signifie que seulement {}
et []
sont valides, complètes chaînes JSON dans les analyseurs et stringifiers qui adhèrent à cette norme.
Toutefois, l'introduction de l'ECMA-404 changements, et la mise à jour des conseils peut être lu ici. J'ai aussi écrit un billet de blog sur le sujet.
Confondre la question, cependant, l' JSON
objet (par exemple, JSON.parse()
et JSON.stringify()
), disponibles dans les navigateurs web est standardisé dans l'ES5, et qui définit clairement l'acceptable JSON textes comme ceci:
Le JSON format d'échange utilisé dans la présente spécification est exactement ce que décrit par la RFC 4627 à deux exceptions près:
Cela signifierait que tous JSON valeurs (y compris les chaînes, les valeurs null et numéros) sont acceptées par l'objet JSON, même si l'objet JSON techniquement conforme à la norme RFC 4627.
Notez que vous pouvez donc stringify un nombre dans un navigateur conforme par JSON.stringify(5)
, qui serait rejetée par un autre analyseur qui adhère à RFC4627, mais qui n'a pas l'exception spécifiques énumérés ci-dessus. Ruby, par exemple, semble être un exemple qui seulement accepte les objets et les tableaux en tant que root. PHP, d'autre part, plus spécifiquement, ajoute l'exception que "il permettra également d'encoder et de décoder les types scalaires et NULL".