parse mostrar estructura datos array javascript json

javascript - mostrar - json.stringify array



Objeto Javascript Vs JSON (4)

Quiero entender claramente las diferencias básicas entre el objeto Javascript y la cadena JSON.

Digamos que creo la siguiente variable JS:

var testObject = {one: 1,"two":2,"three":3};

Q1. ¿El nombre de la clave / propiedad es válido tanto con / sin comillas? (por ejemplo, "one" : 1 )

Si es así, ¿cuál es la diferencia?

Q2: Si convierto el objeto anterior usando JSON.stringify(testObject) , ¿cuál es la diferencia entre el objeto JS original y el JSON?

Siento que son casi lo mismo. Por favor, detalla esto.

Q3: para analizar una cadena JSON, ¿se recomienda el siguiente método?

var javascriptObj = JSON.parse(jSonString);


  1. ¿El nombre de la clave / propiedad es válido tanto con / sin comillas?

    La única vez que necesita incluir una tecla entre comillas cuando usa la notación de Object Literal es cuando la clave contiene un carácter especial ( if , : , - etc). Vale la pena señalar que una clave en JSON debe estar entre comillas dobles .

  2. Si convierto el objeto anterior a JSON usando var jSonString = JSON.stringify(testObject); , ¿cuál es la diferencia entre el 2 (JS obj y JSON)?

    JSON es un formato de intercambio de datos. Es un estándar que describe cómo listas ordenadas y mapas desordenados, cadenas booleanas y números se pueden representar en una cadena. Al igual que XML y YAML es una forma de pasar información estructurada entre idiomas, JSON es el mismo. Un objeto de JavaScript por otro lado es un tipo físico. Al igual que una matriz PHP, una clase / estructura C ++, un objeto JavaScript es un tipo interno a JavaScript.

    Aquí hay una historia. Imaginemos que ha comprado algunos muebles de una tienda y quiere que se entreguen. Sin embargo, el único que queda en existencia es el modelo de visualización, pero usted acepta comprarlo.

    En la tienda, la cómoda que ha comprado es un objeto vivo:

    var chestOfDrawers = { color: "red", numberOfDrawers: 4 }

    Sin embargo, no puede enviar una cómoda en la publicación, por lo que la desmantelará (léase, stringifíquela). Ahora es inútil en términos de muebles. Ahora es JSON. Es en forma de paquete plano.

    {"color":"red","numberOfDrawers":4}

    Cuando lo recibe, luego reconstruye la cómoda (lea, analícela). Ahora está de vuelta en forma de objeto.

    La razón detrás de JSON / XML y YAML es permitir que los datos se transfieran entre los lenguajes de programación en un formato que ambos lenguajes pueden entender; no puedes dar a PHP o C ++ tu objeto JavaScript directamente; porque cada idioma representa un objeto diferente bajo el capó. Sin embargo, debido a que hemos codificado el objeto en notación JSON; es decir, una forma estandarizada de representar datos, podemos transmitir la representación JSON del objeto a otro lenguaje (C ++, PHP), pueden recrear el objeto JavaScript que tenemos en su propio objeto en función de la representación JSON del objeto.

    Es importante tener en cuenta que JSON no puede representar funciones o fechas. Si intenta codificar un objeto con un miembro de función, la función se omitirá de la representación JSON. Una fecha se convertirá en una cadena;

    JSON.stringify({ foo: new Date(), blah: function () { alert(''hello''); } }); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"

  3. Para analizar una cadena JSON, ¿se recomienda el siguiente método? var javascriptObj = JSON.parse(jSonString);

    Sí, pero los navegadores más antiguos no son compatibles con JSON de forma nativa (IE <8) . Para admitir esto, debe incluir json2.js .

    Si está utilizando jQuery, puede llamar a jQuery.parseJSON() , que usará JSON.parse() bajo el cofre si es compatible y de lo contrario recurrirá a una implementación personalizada para analizar la entrada.


Q1: Al definir literales de objeto en javascript, las claves pueden incluir comillas o no. No hay diferencia, excepto que las comillas le permiten especificar ciertas teclas que causarían que el intérprete no pueda analizarlas si las prueba. Por ejemplo, si desea una clave que fuera solo un signo de exclamación, necesitaría presupuestos:

a = { "!": 1234 } // Valid a = { !: 1234 } // Syntax error

Sin embargo, en la mayoría de los casos, puede omitir las comillas de las claves en los literales de los objetos.

Q2: JSON es literalmente una representación de cadena. Es solo una cadena. Por lo tanto, considere esto:

var testObject = { hello: "world" } var jSonString = JSON.stringify(testObject);

Como testObject es un objeto real, puede invocar propiedades y hacer cualquier otra cosa que pueda hacer con los objetos:

testObject.hello => "world"

Por otro lado, jsonString es solo una cadena:

jsonString.hello => undefined

Note una otra diferencia: en JSON, todas las claves deben ser citadas. Eso contrasta con los literales de objetos, donde las citas generalmente se pueden omitir según mi explicación en Q1.

Q3. Puede analizar una cadena JSON utilizando JSON.parse , y esta es generalmente la mejor manera de hacerlo (si el navegador o un marco lo proporciona). También puede usar eval ya que JSON es un código javascript válido, pero el método anterior se recomienda por varias razones (eval tiene muchos problemas desagradables asociados).


Q1: en JS solo necesita utilizar comillas si la clave es una palabra reservada o si de lo contrario sería un token ilegal. En JSON siempre DEBE usar comillas dobles en los nombres de las teclas.

Q2 - jsonString es una versión serializada del objeto de entrada ...

Q3 - que puede ser deserializado a un objeto de aspecto idéntico utilizando JSON.parse()


Problemas resueltos por JSON

Supongamos que desea intercambiar objetos regulares de JavaScript entre dos computadoras, y establece dos reglas:

  • Los datos transmitidos deben ser una cadena regular.
  • Solo se pueden intercambiar atributos, los métodos no se transmiten.

Ahora crea dos objetos en el primer host:

var obj1 = { one: 1,"two":2,"three":3 }; // your example var obj2 = { one: obj1.one, two: 2, three: obj1.one + obj1.two };

¿Cómo se pueden convertir esos objetos en cadenas para su transmisión al segundo host?

  • Para el primer objeto, puede enviar esta cadena obtenida a partir de la definición literal ''{ one: 1,"two":2,"three":3 }'' , pero en realidad no puede leer el literal en la parte del script del documento (al menos no fácil). Entonces, obj1 y obj2 deben procesarse de la misma manera.
  • Debe enumerar todos los atributos y su valor, y construir una cadena similar al literal del objeto.

JSON se ha creado como una solución a las necesidades que acabamos de analizar: es un conjunto de reglas para crear una cadena equivalente a un objeto al enumerar todos los atributos y valores (los métodos se ignoran).

JSON normaliza el uso de comillas dobles para nombres y valores de atributos.

Recuerde que JSON es un conjunto de reglas solamente (un estándar).

¿Cuántos objetos JSON se crean?

Solo uno, es creado automáticamente por el motor JS.

Los motores de JavaScript modernos que se encuentran en los navegadores tienen un objeto nativo, también llamado JSON. Este objeto JSON es capaz de:

  • Decodifique una cadena construida usando el estándar JSON, usando JSON.parse (cadena). El resultado es un objeto JS normal con atributos y valores encontrados en la cadena JSON.

  • Codifique atributos / valores de un objeto JS normal utilizando JSON.stringify (). El resultado es una cadena que cumple con el conjunto de reglas JSON.

El objeto (único) JSON es similar a un códec, su función es codificar y decodificar.

Tenga en cuenta que:

  • JSON.parse () no crea un objeto JSON, sino que crea un objeto JS normal, no hay diferencia entre un objeto creado con un objeto literal y un objeto creado por JSON.parse () desde una cadena compatible con JSON.

  • Solo hay un objeto JSON, que se usa para todas las conversiones.

Volviendo a las preguntas :

  • Q1: Se permite el uso de comillas simples para los literales de los objetos. Tenga en cuenta que las comillas se usan opcionalmente para nombres de atributos, y son obligatorias para los valores de cadena. El objeto literal en sí mismo no está rodeado por comillas.

  • Q2: los objetos creados a partir de literales y el uso de JSON.parse () son estrictamente los mismos. Estos dos objetos son equivalentes después de la creación:

    var obj1 = { one: 1, "two": 2, "three": 3 };
    var obj2 = JSON.parse(''{ "one": "1", "two": "2", "three": "3" }'');

  • Q3: en los navegadores modernos, JSON.parse() se utiliza para crear un objeto JS a partir de una cadena compatible con JSON. (jQuery también tiene un método equivalente que se puede usar para todos los navegadores).