recorrer parse objeto mostrar ejemplo datos create convertir array javascript json validation

parse - mostrar datos json javascript



¿Cuál es el mínimo JSON válido? (8)

De acuerdo con la antigua definición en RFC-4627 (que fue obsoleta en marzo de 2014 por RFC 7159), todos eran válidos "valores JSON", pero solo los dos últimos constituirían un "texto JSON" completo:

Un texto JSON es un objeto serializado o matriz.

Dependiendo del analizador utilizado, los solitarios "valores JSON" podrían aceptarse de todos modos. Por ejemplo (apegándose a la terminología "JSON value" versus "JSON text"):

  • la función JSON.parse() ahora estandarizada en los navegadores modernos acepta cualquier "valor JSON"
  • la función PHP json_decode se introdujo en la versión 5.2.0 solo aceptando un "texto JSON" completo, pero se modificó para aceptar cualquier "valor JSON" en la versión 5.2.1
  • Python''s json.loads acepta cualquier "valor JSON" según los ejemplos en esta página de manual
  • el validador en jsonlint.com espera un "texto JSON completo"
  • el módulo Ruby JSON solo aceptará un "texto JSON" completo (al menos de acuerdo con los comentarios en esta página del manual )

La distinción es un poco como la distinción entre un "documento XML" y un "fragmento XML", aunque técnicamente <foo /> es un documento XML bien formado (¿sería mejor escribirlo como <?xml version="1.0" ?><foo /> , pero como se señala en los comentarios, la declaración <?xml es técnicamente opcional).

He leído detenidamente la descripción de JSON http://json.org/ pero no estoy seguro de saber la respuesta a la pregunta simple. ¿Qué cadenas son el mínimo posible JSON válido?

  • "string" es la cadena JSON válida?
  • 42 es el número simple válido JSON?
  • true es el valor booleano un JSON válido?
  • {} es el objeto vacío un JSON válido?
  • [] es la matriz vacía un JSON válido?

En el momento de escribir, JSON se describió únicamente en RFC4627 . Describe (al comienzo de "2") un texto JSON como un objeto serializado o matriz.

Esto significa que solo {} y [] son válidos, completan cadenas JSON en analizadores y secuenciadores que se adhieren a ese estándar.

Sin embargo , la introducción de ECMA-404 cambia eso, y los consejos actualizados se pueden leer aquí . También escribí una publicación en el blog sobre el tema.

Sin embargo, para confundir el asunto aún más, el objeto JSON (por ejemplo, JSON.parse() y JSON.stringify() ) disponible en los navegadores web está estandarizado en ES5 , y eso define claramente los textos JSON aceptables como sigue:

El formato de intercambio JSON utilizado en esta especificación es exactamente el descrito por RFC 4627 con dos excepciones:

  • La producción de JSONText de nivel superior de la gramática ECMAScript JSON puede consistir en cualquier JSONValue en lugar de estar restringido a ser un JSONObject o un JSONArray como se especifica en RFC 4627.

  • cortado

Esto significa que el objeto JSON acepta todos los valores JSON (incluidas cadenas, nulos y números), aunque el objeto JSON se adhiere técnicamente al RFC 4627.

Tenga en cuenta que, por lo tanto, podría stringify un número en un navegador conforme a través de JSON.stringify(5) , que sería rechazado por otro analizador que se adhiere a RFC4627, pero que no tiene la excepción específica enumerada 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á los tipos escalares y NULL".


Hay al menos cuatro documentos (rfc-7159 se considera una continuación de rfc-7158) que se pueden considerar estándares JSON en Internet. Los tres primeros RFC describen todos la application/json tipo mime application/json . Esto es lo que cada uno tiene que decir sobre los valores de nivel superior:

RFC-4627 : No.

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 serializado o matriz.

JSON-text = object / array

Tenga en cuenta que RFC-4627 fue marcado como "informativo" en lugar de "estándar propuesto", y que está obsoleto por RFC-7158 y RFC-7159.

RFC-7158 : Sí. (a partir de rev. bis-08 )

(Ver RFC-7159, que actualmente es idéntico).

RFC-7159 : Sí.

Un texto JSON es un valor serializado. Tenga en cuenta que ciertas especificaciones previas de JSON obligaban a un texto JSON a ser un objeto o una matriz. Las implementaciones que generan solo objetos o matrices en las que se solicita un texto JSON serán interoperables en el sentido de que todas las implementaciones aceptarán que se trata de textos JSON conformes.

JSON-text = ws value ws

Tenga en cuenta que RFC-7159 existe simplemente porque la fecha de publicación de RFC-7158 se publicó erróneamente como "marzo de 2013" cuando se actualizó en marzo de 2014 ( source ).

ECMA-262 : Sí.

La Gramática Sintáctica JSON define un texto JSON válido en términos de tokens definidos por la gramática léxica JSON. El símbolo de objetivo de la gramática es JSONText.

Sintaxis JSONText:

JSONValue

JSONValue:

JSONNullLiteral

JSONBooleanLiteral

JSONObject

JSONArray

JSONString

JSONNumber

ECMA-404 : Sí.

Un texto JSON es una secuencia de tokens formados a partir de puntos de código Unicode que se ajusta a la gramática de valores JSON. El conjunto de tokens incluye seis tokens estructurales, cadenas, números y tres tokens de nombres literales.


JSON significa Notación de Objeto JavaScript. Solo {} y [] definen un objeto Javascript. Los otros ejemplos son literales de valor. Hay tipos de objetos en Javascript para trabajar con esos valores, pero la expresión "string" es una representación de código fuente de un valor literal y no un objeto.

Tenga en cuenta que JSON no es Javascript. Es una notación que representa datos. Tiene una estructura muy simple y limitada. Los datos JSON se estructuran usando caracteres {},:[] . Solo puedes usar valores literales dentro de esa estructura.

Es perfectamente válido para un servidor responder con una descripción de objeto o un valor literal. Todos los analizadores JSON deben ser manipulados para manejar solo un valor literal, pero solo un valor. JSON solo puede representar un solo objeto a la vez. Entonces, para que un servidor devuelva más de un valor, debería estructurarlo como un objeto o una matriz.


La especificación ecma podría ser útil para referencia:

http://www.ecma-international.org/ecma-262/5.1/

La función de análisis analiza un texto JSON (una cadena con formato JSON) y produce un valor de ECMAScript. El formato JSON es una forma restringida de ECMAScript literal. Los objetos JSON se realizan como objetos ECMAScript. Las matrices JSON se realizan como matrices ECMAScript. Las cadenas JSON, números, booleanos y null se realizan como cadenas ECMAScript, números, booleanos y nulo. JSON utiliza un conjunto más limitado de espacios en blanco que WhiteSpace y permite que los puntos de código Unicode U + 2028 y U + 2029 aparezcan directamente en los literales JSONString sin usar una secuencia de escape. El proceso de análisis es similar a 11.1.4 y 11.1.5 como limitado por la gramática JSON.

JSON.parse("string"); // SyntaxError: Unexpected token s JSON.parse(43); // 43 JSON.parse("43"); // 43 JSON.parse(true); // true JSON.parse("true"); // true JSON.parse(false); JSON.parse("false"); JSON.parse("trueee"); // SyntaxError: Unexpected token e JSON.parse("{}"); // {} JSON.parse("[]"); // []


Si si SI SI y si. Todos ellos son literales de valores JSON válidos.

Sin embargo, el RFC4627 oficial establece:

Un texto JSON es un objeto serializado o matriz.

Por lo tanto, un "archivo" completo debe consistir en un objeto o matriz como la estructura más externa, que por supuesto puede estar vacía. Sin embargo, muchos analizadores de JSON aceptan valores primitivos también para la entrada.


Simplemente siga los diagramas del ferrocarril que figuran en la página http://json.org/ . [] y {} son los objetos JSON válidos mínimos posibles. Entonces la respuesta es [] y {}.


var x; JSON.stringify(x); // will output "{}"

Entonces tu respuesta es "{}" que denota un objeto vacío.