Solución:
El RFC relevante es el RFC 7159, no el RFC 4627. El RFC 4627 es “informativo”. RFC 7159 es “seguimiento de estándares”; explícitamente obsoleta RFC 4627.
Request for Comments: 7159 Google, Inc. Obsoletes: 4627, 7158 March 2014 Category: Standards Track ISSN: 2070-1721
En el texto de RFC 7159, encontrará esto.
13. Examples This is a JSON object: { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, 38793] } } [snip] Here are three small JSON texts containing only values: "Hello world!" 42 true
{ "astring" }
no es JSON válido y tampoco lo es "astring"
o astring
, ya que necesitamos tanto una clave como un valor, p. ej. { KEY : VALUE }
dónde KEY
es siempre una cuerda y VALUE
puede ser una cadena, un número, un valor booleano o un valor nulo.
De la especificación:
Sí, como dice la especificación, JSON puede ser un valor primitivo de nivel superior sin un objeto que lo envuelva. – Andy Ray
Si lo entendí correctamente, ese comentario no es correcto. JSON válido es Nunca un valor primitivo de nivel superior por sí mismo. Si todavía está confundido, esto debería aclarar las cosas:
Gramática JSON
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:
matriz-comienzo = ws% x5B ws; [ left square bracket
begin-object = ws %x7B ws ; { left curly bracket
end-array = ws %x5D ws ; ] corchete derecho
end-object = ws %x7D ws ; } right curly bracket
name-separator = ws %x3A ws ; : colon
value-separator = ws %x2C ws ; , comma
Se permiten espacios en blanco insignificantes antes o después de cualquiera de los seis caracteres estructurales.