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 JSONobjeto (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".