No momento da redação deste artigo, o JSON era descrito apenas no RFC4627 . Ele descreve (no início de "2") um texto JSON como um objeto ou matriz serializada.
Isso significa que apenas {}
e []
são válidas, as strings JSON completas nos analisadores e stringifiers que aderem a esse padrão.
No entanto , a introdução do ECMA-404 altera isso e os conselhos atualizados podem ser lidos aqui . Também escrevi um post sobre o assunto.
No entanto, para confundir ainda mais o assunto, o JSON
objeto (por exemplo, JSON.parse()
e JSON.stringify()
) disponível nos navegadores da web é padronizado no ES5 , e isso define claramente os textos JSON aceitáveis da seguinte forma:
O formato de intercâmbio JSON usado nesta especificação é exatamente o descrito pelo RFC 4627, com duas exceções:
Isso significa que todos os valores JSON (incluindo cadeias, valores nulos e números) são aceitos pelo objeto JSON, mesmo que o objeto JSON tecnicamente esteja em conformidade com o RFC 4627.
Observe que, portanto, você pode especificar um número em um navegador conforme JSON.stringify(5)
, que seria rejeitado por outro analisador que adere à RFC4627, mas que não possui a exceção específica listada acima. Ruby, por exemplo, parece ser um exemplo que aceita apenas objetos e matrizes como raiz . Por outro lado, o PHP adiciona especificamente a exceção de que "ele também codifica e decodifica os tipos escalares e NULL".