2010-10-20 29 views
89

Soy nuevo en los objetos JSON y JavaScript.¿Cuáles son las diferencias entre el objeto JSON y JavaScript?

  • ¿Puede alguien explicar las diferencias entre objeto JSON y JavaScript?
  • ¿Cuáles son sus usos?
  • ¿Es uno mejor que el otro? ¿O depende de la situación?
  • ¿Cuándo usar cuál, en qué situación?
  • ¿Por qué se creó JSON en primer lugar? ¿Cuál fue su objetivo principal?
  • ¿Puede alguien dar ejemplos de cuándo se debe usar JSON en lugar de un objeto JavaScript y viceversa?
+0

Una pregunta a la vez, por favor. –

+0

posible duplicado de [¿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) – Teepeemm

Respuesta

131

En primer lugar usted debe saber lo que es JSON:

  • Es formato de intercambio de datos lenguaje agnóstico.

La sintaxis de JSON está inspirada en la notación de JavaScript Object Literal, pero existen diferencias entre ellos.

Por ejemplo, en JSON todos teclas podrá ser citado, mientras que en los literales de objetos esto no es necesario:

// JSON: 
{ "foo": "bar" } 

// Object literal: 
var o = { foo: "bar" }; 

Las citas son obligatorios en JSON porque en JavaScript (más exactamente en tercera ECMAScript Edition.), el uso de palabras reservadas como nombres de propiedades no está permitido, por ejemplo:

var o = { if: "foo" }; // SyntaxError in ES3 

Mientras, usando una cadena literal como un nombre de propiedad (citando el pro Nombre perty) no da problemas:

var o = { "if": "foo" }; 

Así que para "compatibilidad" (y fácil eval'ing tal vez) las cotizaciones son obligatorias?.

Los tipos de datos en JSON también se restringen a los siguientes valores:

  • string
  • number
  • object
  • array
  • Un literal como:
    • true
    • false
    • null

La gramática de Strings cambios. Ellos tienen que estar delimitados por comillas dobles, mientras que en JavaScript, puede usar comillas simples o dobles indistintamente.

// Invalid JSON: 
{ "foo": 'bar' } 

El aceptada gramática JSON de Numbers también cambia, en JavaScript puede utilizar hexadecimales literales, por ejemplo 0xFF, o (el infame) Octal literales por ejemplo 010. En JSON, solo puedes usar Decimal Literals.

// Invalid JSON: 
{ "foo": 0xFF } 

Hay algunas implementaciones buggy (Firefox 3.5+, IE8 +, json2.js) donde literales octales se permite erróneamente, por ejemplo, JSON.parse('01') debe producir un SyntaxError.

+34

+1 Buena respuesta pero podría hacer hincapié en la subconjunto: cualquier declaración JSON válida también es una declaración válida de JavaScript, pero no todas las declaraciones JavaScript válidas son declaraciones JSON. –

+1

También sería útil demostrar la única forma en que alguna vez veríamos JSON en un archivo Javascript; es decir, dentro de una cadena. –

+0

@CMS lo describe perfectamente arriba, pero diría que se puede decir la diferencia por lo que JSON realmente significa ... ¡que es JavaScript Oject "Notación"! – Alex

21

JSON es una representación de cadena de un objeto. Es un formato de serialización interoperable. No está vinculado solo a javascript. Por ejemplo, hay serializadores JSON para .NET que le permiten serializar/deserializar objetos .NET.

Por lo tanto, es solo un formato que le permite convertir objetos a cadena y hacia atrás, lo que es conveniente si desea transferirlos a través del cable.

Está muy cerca de la representación de objetos javascript y si simplemente eval() una cadena JSON obtendrá el objeto correspondiente.

+3

No dejes que Crockford te escuche decir que ... – nickf

+4

@nickf, la biblioteca de Crockford json2.js hace exactamente eso, 'eval' después de cierta" validación de expresiones regulares ", no hace nada de * análisis *: P. De hecho, incluso su * propia biblioteca * tiene algunas desviaciones de [su propio RFC] (http://www.ietf.org/rfc/rfc4627.txt?number=4627) !, por ejemplo, json2.js puede equivocarse " parse "literales Octal, por ejemplo:' JSON.parse ("01") '... Me parece gracioso: P – CMS

+0

@CMS Bueno, supongo que Doug se opondría a la frase" simplemente 'eval()' "luego ... (sin la validación de expresiones regulares, etc.) – nickf

1

JSON es un formato de intercambio de datos, que parece ser un subconjunto de código YAML o JavaScript que puede ejecutar y recuperar un objeto. Un objeto JavaScript es solo un objeto en JavaScript.

Con JSON es un formato de intercambio de datos puede intercambiar datos estructurados en una forma textual con él. Ya está bastante desacoplado de JavaScript. El objeto JavaScript le permite crear y trabajar con datos estructurados durante la ejecución de un programa JavaScript.

Cuestiones relacionadas