que - ¿La publicación de ECMA-404 afectó la validez de textos JSON como ''2'' o '''' hola ''''?
json validator (1)
¿Son los siguientes textos JSON válidos, o su valor de nivel superior debe ser una matriz u objeto?
4.0
"Hello World"
true
Preguntas relacionadas en el pasado, como ¿Qué es el JSON mínimo válido? , y ¿Es esta simple cadena considerada válida JSON? Han concluido que no lo son. Esto se basó en la descripción del formato JSON en RFC-4627 , que establece que:
2. JSON Grammar
Un texto JSON es una secuencia de tokens. El conjunto de tokens incluye seis caracteres estructurales, cadenas, números y tres nombres literales.
Un texto JSON es un objeto o matriz serializado.
JSON-text = object / array
Estos son los seis personajes estructurales:
[...]
Sin embargo, el estado RFC-4627 declara que "no especifica un estándar de Internet de ningún tipo". En su lugar, el estándar oficial para JSON es el ECMA-404 recientemente publicado. A diferencia de RFC-4627, la descripción de ECMA-404 de texto JSON válido no incluye ningún requisito de que sea un objeto o una matriz. Por ejemplo, a la sección más similar a la cita anterior le falta ese requisito:
4 texto JSON
Un texto JSON es una secuencia de tokens formados a partir de puntos de código Unicode que se ajustan a la gramática del valor JSON. El conjunto de tokens incluye seis tokens estructurales, cadenas, números y tres tokens de nombre literal.
Las seis fichas estructurales:
[...]
Dada esta nueva especificación, ¿los valores codificados de alto nivel que no pertenecen a una matriz se consideran textos JSON válidos?
Douglas Crockford publicó un comentario en esta publicación de Google+ que me ayudó a comenzar a aclarar las cosas:
JSON es solo una gramática, y la gramática incluye números y cadenas. Los usos de JSON deben ser necesariamente más restrictivos. RFC-4627 es un uso posible, y nunca fue la intención de ser el estándar para JSON.
No podemos decir que los textos JSON que no son de matriz no son objetos generalmente no son válidos, solo que no es válido para usarlos con la application/json
medios de Internet application/json
, según RFC-4627.
Las representaciones de valores no de matriz sin objeto son textos JSON válidos por ECMA-404, que es el único estándar publicado actualmente que podría identificarse como "la especificación JSON".
Sin embargo, resulta que es probable que el IETF publique pronto un reemplazo para RFC-4627 que también será una especificación de JSON. Su último borrador aún incluye la restricción en los textos JSON, pero también menciona que JSON se ha especificado en varios lugares y que estas especificaciones varían ligeramente. El borrador menciona específicamente que la definición de JSON en ECMA-262 (la especificación ECMAScript / JavaScript) no comparte la restricción de valor de nivel superior.
Por lo tanto, la pregunta de si los no arreglos que no son objetos son textos JSON válidos debe ser desambiguada:
¿Es "hello"
un texto JSON válido como se especifica en RFC-4627 y su sucesor?
No.
¿Es "hello"
un texto JSON válido según lo especificado por ECMA-404 y ECMA-262?
Sí.