Al momento de escribir, JSON se describió únicamente en RFC4627 . Describe (al comienzo de "2") un texto JSON como un objeto o conjunto serializado.
Esto significa que solo {}
y []
son válidas, completar cadenas JSON en analizadores y stringifiers que cumplan con ese estándar.
Sin embargo , la introducción de ECMA-404 cambia eso, y el consejo actualizado se puede leer aquí . También he escrito una publicación de blog sobre el tema.
Sin embargo, para confundir aún más el asunto, el JSON
objeto (por ejemplo, JSON.parse()
y JSON.stringify()
) disponible en los navegadores web está estandarizado en ES5 , y eso define claramente los textos JSON aceptables de esta manera:
El formato de intercambio JSON utilizado en esta especificación es exactamente el descrito por RFC 4627 con dos excepciones:
Esto significaría que el objeto JSON acepta todos los valores JSON (incluidas las cadenas, los valores nulos y los números), aunque el objeto JSON se adhiera técnicamente a RFC 4627.
Tenga en cuenta que, por lo tanto, podría encadenar un número en un navegador conforme a través de JSON.stringify(5)
, que sería rechazado por otro analizador que se adhiera a RFC4627, pero que no tenga la excepción específica mencionada anteriormente. Ruby, por ejemplo, parece ser uno de esos ejemplos que solo acepta objetos y matrices como raíz . PHP, por otro lado, agrega específicamente la excepción de que "también codificará y decodificará tipos escalares y NULL".