2012-06-08 18 views
5

tengo la confusión acerca de lo que la gente entiende por literales de objetos, JSON, JavaScript objetos, a mí parecer similares:¿Cuál es la diferencia entre un objeto JS literal y una cadena JSON?

{foo: 'bar', bar : 'baz'} 

yo sepa, es objeto literal anterior, JSON, así como Javascript objeto, ¿no es cierto ?

¿Objeto literal y json significan lo mismo?

¿Cómo diferencian qué es qué?

+1

Esta pregunta y sus respuestas pueden ser útil: [¿Cuál es la diferencia entre JSON y Object Literal Notation?] (http://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) –

+2

Es muy raro que cree manualmente una cadena en JavaScript para representar una estructura JSON. Normalmente, si hay datos JSON en su JavaScript, se habrá creado usando 'JSON.stringify()'. Piense en JSON como marcado que se analiza en estructuras de datos. Ese marcado puede enviarse a un entorno que no sea JavaScript y analizarse en cualquier estructura de datos que tenga sentido para ese entorno. –

+2

... en otras palabras, es un formato de texto estandarizado para transferir datos entre diferentes entornos de programación. –

Respuesta

7

JSON es un sólo un formato de datos, como XML. Es cierto JSON debe tener las llaves rodeadas por comillas dobles, así:

{"foo":"bar"} 

objetos JavaScript son parte del lenguaje JavaScript, y se han asociado cosas tales como un prototipo.

literales de objetos está creando un objeto de javascript en su lugar con abrazaderas en lugar de utilizar la palabra clave new, o Object.create().

//object literal 
var foo = {}; 

//equivalent 
var foo = new Object(); 
+0

Me gusta la respuesta, aparte de la primera oración. Dada solo esta línea de código, no es JSON ni JavaScript válido (o literal del objeto). Para JSON, omite las comillas alrededor de las teclas y en JavaScript, ya que no está en un contexto de expresión, el '{}' se interpretaría como delimitadores de bloque (y no como indicadores literal de objeto). Entonces no son los tres, no es ninguno de los dos. –

+1

Buen punto. esa oración es innecesaria. ¡remoto! –

2

De acuerdo con specification, en JSON todas las cadenas, ya sean valores o palabras clave, deben estar rodeadas por comillas dobles.

Tu ejemplo podría ser una cadena JSON válida si contiene lo siguiente:

{"foo": "bar", "bar": "baz"} 
+0

Del mismo enlace, "Un valor puede ser una cadena entre comillas dobles, o un número, o verdadero o falso o nulo, o un objeto o una matriz. Estas estructuras pueden ser anidado " – Jashwant

+0

Sería JSON válido si fuera' {"foo": "bar", "bar": "baz"} '... las comillas circundantes no son válidas. –

+0

@FelixKling Creo que por "cadena JSON válida" lo que realmente quieren decir es "una cadena que contiene sintaxis JSON válida". O, para decirlo de otra manera, una cadena que podría analizarse como JSON para crear un objeto. –

4

yo sepa, es objeto literal anterior, JSON, así como Javascript objeto, ¿verdad?

Es un objeto literal. Crea un objeto.

No es JSON, ya que no se ajusta a la sintaxis (que es un subconjunto de la notación literal del objeto). Las claves no están entrecomilladas y se utilizan el tipo incorrecto de comillas (' en lugar de ") alrededor de los valores.

¿Cómo diferencian qué es qué?

Contexto.

JSON no suele aparecer (incrustado) en medio de los programas de JavaScript. Es un formato de datos y generalmente aparece como archivos completos (o respuestas HTTP).

Cuando algo espera un objeto, puede obtener uno de un objeto literal o de una variable (o un valor de retorno de una llamada de función, etc., etc.).

11

La variable jsonString contiene una cadena JSON:

var jsonString = '{"foo": "bar", "bar" : "baz"}' 

La variable javascriptObject contiene un objeto de JavaScript, ya iniciada usando un objeto literal:

var javascriptObject = {foo: 'bar', bar : 'baz'} 

Usted puede convertir una cadena JSON en un objeto javascript con JSON.parse, y de vuelta con JSON.stringify.

4

JSON se origina a partir de la notación literal del objeto de JavaScript y en sí misma es una cadena. Eso explica la similitud, cuando solo lo miro. Hoy JSON se usa como un medio general de serializar todo tipo de datos, antes de enviarlos a través de alguna red o almacenarlos.

// this is a JSON variable 
var json = '{"foo": "bar", "bar" : "baz"}'; 

// obj is a JavaScript obj, defined by the object literal on the right hand side 
var obj = {foo: 'bar', bar : 'baz'}; 
  • JSON - objeto serializado; sintaxis similar como la definición de un objeto en JS
  • Objeto literal - sintaxis abreviada para definir un objeto en JS
  • Objeto - el resultado de una definición por, por ejemplo, un objeto literal

En JS puede convertir una cadena JSON en un objeto mediante

var obj = JSON.parse(json); 

y obtener la representación de un objeto JSON (con exclusión de las funciones adjuntas) por

var json = JSON.stringify(obj); 
+3

Su cadena json no es válida json ... – Eric

+0

@Eric Gracias. Editado – Sirko

+2

Su cadena json todavía _ no es válida. – Eric

0

objeto literal:

referencia a mozilla,

Un objeto literal es una lista de cero o más pares de nombres de propiedades y valores asociados de un objeto, encerrado en rizado llaves ({}).

Javascript objeto:

referencia a mozilla,

En JavaScript, un objeto es una entidad independiente, con propiedades y tipo

JSON:

referencia a mozilla y mozilla

JSON (JavaScript Object Notation) es un formato de intercambio de datos. Es se asemeja mucho a un subconjunto de la sintaxis de JavaScript, aunque no es un subconjunto estricto .JSON es una sintaxis para serializar objetos, matrices, números , cadenas, booleanos y nulo.Se basa en la sintaxis de JavaScript pero es distinta de él: algunos JavaScript no son JSON, y algunos JSON no son JavaScript.

En palabras sueltas,

Un object es una variable javascript que puede tener propiedades y tipo.

Un object literal es una forma de asignar propiedades y valores asociados a object.

JSON es un object literal más estricto utilizado para el intercambio de datos que se envuelve como una cadena.

(Por lo general, el rigor está ahí para permitir que todos los idiomas para usarlo, no podemos usar function como valor, key siempre debe estar entre comillas dobles (En literal objeto no es obligatoria))

Cuestiones relacionadas