2010-10-20 22 views
89

Sono nuovo agli oggetti JSON e JavaScript.Quali sono le differenze tra l'oggetto JSON e JavaScript?

  • Qualcuno può spiegare le differenze tra JSON e l'oggetto JavaScript?
  • Quali sono i loro usi?
  • Uno è migliore dell'altro? O dipende dalla situazione?
  • Quando utilizzare quale, in quale situazione?
  • Perché JSON è stato creato in primo luogo? Qual era il suo scopo principale?
  • Qualcuno può dare esempi di quando si dovrebbe usare JSON piuttosto che un oggetto JavaScript e viceversa?
+0

Una domanda alla volta, per favore. –

+0

possibile duplicato di [Qual è la differenza tra JSON e Object Literal Notation?] (Http://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal- notation) – Teepeemm

risposta

131

In primo luogo si dovrebbe sapere cosa JSON è:

  • È lingua agnostico formato di scambio di dati.

La sintassi di JSON è stata ispirata dalla notazione JavaScript Object Literal, ma ci sono differenze tra di loro.

Per esempio, in JSON tutti chiavi deve essere quotato, mentre in letterali oggetto non è necessario:

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

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

Le virgolette sono obbligatorie in JSON, perché in JavaScript (più precisamente in 3 ° ECMAScript Edition.), l'utilizzo di parole riservate come nomi di proprietà non è consentita, ad esempio:

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

Mentre, utilizzando una stringa letterale come un nome di proprietà (citando il pro Nome perty) non dà problemi:

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

Così per "compatibilità" (e facile eval'ing forse) le virgolette sono obbligatorie?.

I tipi di dati in JSON sono limitati ai seguenti valori:

  • string
  • number
  • object
  • array
  • A letterale:
    • true
    • false
    • null

La grammatica di Strings modifiche. Essi devono essere delimitati da virgolette doppie, mentre in JavaScript, è possibile utilizzare le virgolette singole o doppie in modo intercambiabile.

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

La accettato JSON grammatica della Numbers cambia anche, in JavaScript è possibile utilizzare esadecimali letterali, ad esempio 0xFF, o (il famigerato) Octal letterali esempio 010. In JSON puoi usare solo decimal letterali.

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

ci sono alcune implementazioni buggy (Firefox 3.5+, IE8 +, json2.js), dove letterali ottale sono erroneamente ammessi, per esempio JSON.parse('01') dovrebbe produrre un SyntaxError.

+34

+1 Buona risposta, ma potrebbe essere utile enfatizzando la subsetting: qualsiasi dichiarazione JSON valida è anche una dichiarazione JavaScript valida, ma non tutte le dichiarazioni JavaScript valide sono dichiarazioni JSON. –

+1

Sarebbe anche utile dimostrare l'unico modo in cui avremmo mai visto JSON in un file Javascript; cioè dentro una corda. –

+0

@CMS lo descrive perfettamente sopra, ma direi che puoi dire la differenza da ciò che in realtà rappresenta JSON ... è JavaScript Oject "Notation"! – Alex

21

JSON è una rappresentazione di stringa di un oggetto. È un formato di serializzazione interoperabile. Non è legato solo a javascript. Ad esempio, esistono serializzatori JSON per .NET che consentono di serializzare/deserializzare oggetti .NET.

Quindi è solo un formato che consente di convertire da oggetti a stringa e viceversa che è conveniente se si desidera trasferirli sul filo.

È molto vicino alla rappresentazione di oggetti javascript e se si semplicemente eval() una stringa JSON si otterrà l'oggetto corrispondente.

+3

Non lasciare che Crockford ti senta dire che ... – nickf

+4

@nickf, la libreria json2.js di Crockford fa proprio questo, 'eval' dopo un po 'di" regex validation ", non fa nulla di * parsing *: P. In effetti, anche la sua * propria libreria * ha alcune deviazioni dalla [propria RFC] (http://www.ietf.org/rfc/rfc4627.txt?number=4627) !, ad esempio, json2.js può erroneamente " parse "Letterali ottali, ad esempio:' JSON.parse ("01") '... Lo trovo divertente: P – CMS

+0

@CMS Beh immagino che Doug si opponga alla frase" semplicemente 'eval()' "quindi ... (sans la convalida di espressioni regolari e così via) – nickf

1

JSON è un formato di interscambio di dati, il che succede solo a guardare come un sottoinsieme di YAML o JavaScript codice è possibile eseguire e ottenere un oggetto indietro. Un oggetto JavaScript è solo un oggetto in JavaScript.

Con JSON che è un formato di scambio di dati è possibile scambiare i dati strutturati in un modulo testuale con esso. Ormai è abbastanza disgiunto da JavaScript. L'oggetto JavaScript ti consente di creare e lavorare con i dati strutturati durante l'esecuzione di un programma JavaScript.

Problemi correlati