Qual è la differenza tra JSON e Object Literal Notation?


220

Qualcuno può dirmi qual è la differenza principale tra un oggetto JavaScript definito utilizzando Object Literal Notation e l' oggetto JSON ?

Secondo un libro JavaScript, si dice che questo è un oggetto definito usando Notazione oggetto :

var anObject = {
    property1 : true,
    showMessage : function (msg) { alert(msg) }
};

Perché non è un oggetto JSON in questo caso? Solo perché non è definito usando le virgolette?


20
"Perché in questo caso non è un oggetto JSON?": Perché le tue chiavi devono essere stringhe e una funzione non è un valore JSON valido.
Matt,

Risposte:


248

Chiariamo prima cosa sia effettivamente JSON . JSON è un formato di scambio di dati testuale e indipendente dalla lingua, molto simile a XML, CSV o YAML.

I dati possono essere archiviati in molti modi, ma se devono essere archiviati in un file di testo ed essere leggibili da un computer, devono seguire una struttura. JSON è uno dei tanti formati che definiscono tale struttura.

Tali formati sono in genere indipendenti dalla lingua, nel senso che possono essere elaborati da Java, Python, JavaScript, PHP, lo chiami tu.

Al contrario, JavaScript è un linguaggio di programmazione. Naturalmente JavaScript fornisce anche un modo per definire / descrivere i dati, ma la sintassi è molto specifica per JavaScript.

Come contro esempio, Python ha il concetto di tuple , la loro sintassi è (x, y). JavaScript non ha qualcosa del genere.


Vediamo le differenze sintattiche tra i letterali degli oggetti JSON e JavaScript.

JSON ha i seguenti vincoli sintattici:

  • Le chiavi dell'oggetto devono essere stringhe (ovvero una sequenza di caratteri racchiusa tra virgolette doppie ").
  • I valori possono essere:
    • una stringa
    • un numero
    • un oggetto (JSON)
    • un array
    • true
    • false
    • null
  • Le chiavi duplicate ( {"foo":"bar","foo":"baz"}) producono risultati non definiti, specifici per l'implementazione; la specifica JSON in particolare non definisce la loro semantica

In JavaScript, i letterali degli oggetti possono avere

  • Letterali stringa, letterali numerici o nomi identificativi come chiavi (dal momento che ES6, ora è possibile calcolare anche le chiavi, introducendo ancora un'altra sintassi).
  • I valori possono essere qualsiasi espressione JavaScript valida, comprese le definizioni delle funzioni e undefined.
  • Le chiavi duplicate producono risultati definiti e specificati (in modalità libera, quest'ultima definizione sostituisce la prima; in modalità rigorosa, è un errore).

Sapendo che, semplicemente guardando la sintassi , il tuo esempio non è JSON per due motivi:

  1. Le tue chiavi non sono stringhe (letterali). Sono nomi identificativi .
  2. Non è possibile assegnare una funzione come valore a un "oggetto JSON" (poiché JSON non definisce alcuna sintassi per le funzioni).

Ma soprattutto, per ripetere la mia spiegazione dall'inizio: sei in un contesto JavaScript. Si definisce un oggetto JavaScript. Se presente, un "oggetto JSON" può essere contenuto solo in una stringa:

 var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON)
 var json = '{"foo": 452}'; // creates a string containing JSON

Cioè, se stai scrivendo codice sorgente JavaScript e non hai a che fare con una stringa , non hai a che fare con JSON. Forse hai ricevuto i dati come JSON (ad esempio, tramite Ajax o leggendo da un file), ma una volta che tu o una libreria che stai utilizzando li hai analizzati, non è più JSON.


Solo perché i letterali degli oggetti e JSON sembrano simili , ciò non significa che puoi nominarli in modo intercambiabile. Vedi anche Non esiste un "oggetto JSON" .


8
Si noti inoltre che JSON è un sottoinsieme di Object Literal Notation
Sean Kinsey

14
@SeanKinsey: Tranne che non lo è: timelessrepo.com/json-isnt-a-javascript-subset
mpen

1
Vale la pena notare che in genere ti aspetteresti un oggetto JavaScript letterale in un contesto in cui i commenti sono legali e le specifiche JSON non consentono commenti (vedi questo post .
Brian Henry,

le chiavi nell'oggetto letterale sono sempre stringhe, nonostante tu usi "" o no.
Scambio eccessivo del

2
@overexchange: "le chiavi nell'oggetto letterale sono sempre stringhe" Qui stai mescolando due cose, ma non posso biasimarti perché anche qui non ho tracciato una linea chiara. Devi distinguere tra un oggetto letterale e un valore di oggetto . Un letterale è la sequenza di caratteri che scrivi nel codice sorgente. Il valore è ciò che viene creato interpretando il codice sorgente. L'oggetto letterale (sintassi) consente di utilizzare nomi identificativi , valori letterali stringa o valori letterali numerici . Hai ragione nel dire che in fase di runtime, quelli sono tutti convertiti in stringhe (ma ora abbiamo anche dei simboli).
Felix Kling

41

JSON ha una sintassi molto più limitata che include:

  • I valori chiave devono essere indicati
  • Le stringhe devono essere quotate con "e non'
  • Hai un intervallo di valori più limitato (ad es. Nessuna funzione consentita)

1
Mi è piaciuto questo "nessuna funzione consentita".
Karan Kaw,

I commenti non sono ammessi neanche. Per ragioni discutibili. (Li ho
sentiti

15

Non esiste davvero un "oggetto JSON".

La specifica JSON è una sintassi per la codifica dei dati come stringa. Quello che la gente chiama un "oggetto JSON" (in javascript) è in realtà solo un normale oggetto javascript che (probabilmente) è stato de-serializzato da una stringa JSON valida e può essere facilmente ricerializzato come una stringa JSON valida. Ciò significa generalmente che contiene solo dati (e non funzioni). Significa anche che non ci sono date, perché JSON non ha un tipo di data (probabilmente la cosa più dolorosa di JSON;)

Inoltre, (side-rant ...) quando le persone parlano di un "oggetto JSON", quasi sempre significano dati che hanno le "parentesi graffe" ai massimi livelli. Ciò corrisponde perfettamente a un oggetto javascript. Tuttavia, le specifiche JSON non richiedono che ci sia un singolo oggetto "parentesi graffe" al livello superiore di una stringa JSON. È perfettamente valido che JSON abbia un elenco ai massimi livelli o anche che abbia un solo valore. Quindi, mentre ogni "oggetto JSON" corrisponde a un JSON valido, non tutte le stringhe JSON valide corrispondono a quello che chiameremmo un "oggetto JSON"! (perché la stringa potrebbe rappresentare un elenco o un valore atomico)


5
C'è un errore nella tua risposta: JSON non è valido per avere un valore atomico al livello più alto. JSON consente alla parte superiore di essere un oggetto o un array, ma nient'altro. RFC4627 , lo standard, descrive la grammatica di JSON come JSON-text = object / array.
Rory O'Kane,

9

Secondo JSON in JavaScript ,

JSON è un sottoinsieme dell'oggetto notazione letterale di JavaScript.

In altre parole, JSON valido è anche notazione letterale dell'oggetto JavaScript valido ma non necessariamente il contrario.

Oltre a leggere la documentazione , come suggerito da @Filix King, suggerisco anche di giocare con il validatore JSON online JSONLint . È così che ho imparato che le chiavi degli oggetti JSON devono essere stringhe.


2
Solo per notare: non è un sottoinsieme esatto , ci sono alcune stringhe JSON che non erano valide come letterali di oggetti JS
Bergi,

5

🔫 JSON : l'alternativa senza grassi a XML

JSON è stato ampiamente adottato da persone che hanno scoperto che rendeva molto più semplice produrre applicazioni e servizi distribuiti. Il tipo di supporto Internet ufficiale per JSON è application/json RFC 4627. I nomi di file JSON utilizzano l'estensione .json.


► JavaScript Object Notation ( JSON) è un formato di scambio dati leggero, basato su testo e indipendente dalla lingua. JSON è stato utilizzato per scambiare dati tra applicazioni scritte in qualsiasi linguaggio di programmazione.

L'oggetto JSON è un singolo oggetto che contiene due funzioni, analisi e stringify, utilizzate per analizzare e costruire testi JSON.

  • JSON.stringify produce una stringa conforme alla seguente grammatica JSON.
  • JSON.parse accetta una stringa conforme alla grammatica JSON.

Il metodo parseJSON sarà incluso in Fourth Edition of ECMAScript. Nel frattempo, un'implementazione JavaScript è disponibile su json.org.

var objLiteral = {foo: 42}; // JavaScript Object
console.log('Object Literal : ', objLiteral ); // Object {foo: 42}foo: 42__proto__: Object

// This is a JSON String, like what you'd get back from an AJAX request.
var jsonString = '{"foo": 452}';
console.log('JOSN String : ', jsonString ); // {"foo": 452}

// This is how you deserialize that JSON String into an Object.
var serverResposnceObject = JSON.parse( jsonString );
console.log('Converting Ajax response to JavaScript Object : ', serverResposnceObject); // Object {foo: 42}foo: 42 __proto__: Object

// And this is how you serialize an Object into a JSON String.
var serverRequestJSON = JSON.stringify( objLiteral );
console.log('Reqesting server with JSON Data : ', serverRequestJSON); // '{"foo": 452}'

JSON è un sottoinsieme di JavaScript. Javascript è stato derivato dallo standard del linguaggio di programmazione ECMAScript.


► ECMAScript

ECMAScript è cresciuto fino a diventare uno dei linguaggi di programmazione per scopi generici più utilizzati al mondo. È meglio conosciuto come il linguaggio incorporato nei browser Web, ma è stato anche ampiamente adottato per server e applicazioni integrate. ECMAScript si basa su diverse tecnologie di origine, l'essere più noto JavaScript(Netscape Communications)) e JScript(Microsoft Corporation).) . Sebbene prima del 1994, l'ECMA era conosciuta come "European Computer Manufacturers Association", dopo il 1994, quando l'organizzazione divenne globale, il "marchio" "Ecma" è stato mantenuto per ragioni storiche.

ECMAScript è il linguaggio, mentre vengono chiamati JavaScript, JScript e persino ActionScript "Dialects".

I dialetti sono stati derivati ​​dalla stessa lingua. Sono abbastanza simili tra loro in quanto derivati ​​dalla stessa lingua ma hanno subito alcuni cambiamenti. Un dialetto è una variazione della lingua stessa. Deriva da una sola lingua.

  • Linguaggio SQL: ibernazione dialetto MySQL, dialetto Oracle, .. che presentano alcune modifiche o funzionalità aggiuntive.

Informazioni sul browser e sul computer dei tuoi utenti.

navigator.appName // "Netscape"

ECMAScript è il linguaggio di scripting che costituisce la base di JavaScript. .JavaScript language resources

ECMA-262 Links
Initial Edition, June 1997 PDF.
2nd Edition, August 1998 PDF.
3rd Edition, December 1999 PDF.
5th Edition, December 2009 PDF.
5.1 Edition, June 2011 HTML.
6th Edition, June 2015 HTML.
7ᵗʰ Edition, June 2016 HTML.
8th edition, June 2017 HTML.
9th Edition, 2018 HTML.

NOTA «La 4a edizione di ECMAScript non è stata pubblicata perché l'opera era incompleta .


JSON definisce un piccolo set di regole di formattazione per la rappresentazione portatile di dati strutturati.

  1. ► I valori delle chiavi devono essere indicati, solo le stringhe sono consentite per le chiavi. Se si utilizza diverso da String, verrà convertito in String. Ma non è consigliabile utilizzare chiavi diverse da quelle di String. Controlla un esempio come questo - { 'key':'val' }finitoRFC 4627 - jsonformatter

    var storage = {
      0 : null,
      1 : "Hello"
    };
    console.log( storage[1] ); // Hello
    console.log( JSON.stringify( storage ) ); // {"0":null,"1":"Hello","2":"world!"}
    
    var objLiteral = {'key1':'val1'};
        var arr = [10, 20], arr2 = [ 'Yash', 'Sam' ];
        var obj = { k: 'v' }, obj2 = { k2: 'v2' };
        var fun = function keyFun() {} ;
    
    objLiteral[ arr ] = 'ArrayVal';     objLiteral[ arr2 ] = 'OverridenArrayVal';
    objLiteral[ obj ] = 'ObjectVal';    objLiteral[ obj2 ] = 'OverridenObjectVal';
    objLiteral[ fun ] = 'FunctionVal';
    
    console.log( objLiteral );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    console.log( JSON.stringify( objLiteral ) );
    // {"key1":"val1","10,20":"ArrayVal","Yash,Sam":"OverridenArrayVal","[object Object]":"OverridenObjectVal","function keyFun() {}":"FunctionVal"}
    console.log( JSON.parse( JSON.stringify( objLiteral ) ) );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    
    console.log('Accessing Array  Val : ', objLiteral[ [10,20] ] );
    console.log('Accessing Object Val : ', objLiteral[ '[object Object]' ] );
    console.log('Accessing Function Val : ', objLiteral[ 'function keyFun() {}' ] );
  2. ► Le stringhe JSON devono essere citate con "e non". Una stringa è molto simile a una stringa C o Java. Le stringhe devono essere racchiuse tra virgolette doppie.

    • I letterali sono valori fissi, non variabili, che letteralmente fornisci nella tua sceneggiatura.
    • Una stringa è una sequenza di zero o più caratteri racchiusi tra virgolette con scappamento a barra rovesciata, la stessa notazione utilizzata nella maggior parte dei linguaggi di programmazione.
      • 🔫 - I simboli speciali sono consentiti in String ma non è consigliato l'uso.
      • \ "- I caratteri speciali possono essere salvati. Ma non è consigliato scappare (') Virgolette singole. In modalità Strict genererà ed Errore - SyntaxError: Unexpected token ' in JSON

    Verificare con questo codice { "Hai\" \n Team 🔫":5, "Bye \'": 7 }tramite le edizioni JSON online.ModesnotStrict,Strinct.

    var jsonString = "{'foo': 452}"; // {'foo': 452}
    var jsonStr = '{"foo": 452}'; // {"foo": 452}
    
    JSON.parse( jsonString ); // Unexpected token ' in JSON at position 1(…)
    JSON.parse( jsonStr ); // Object {foo: 452}
    
    objLiteral['key'] = 'val'; // Object {foo: 42, key: "val"}
    objLiteral.key2 = 'val';
    
    // objLiteral.key\n3 - SyntaxError: Invalid or unexpected token
    objLiteral['key\n3'] = 'val'; // Object {"foo": "42", key: "val", key2: "val", "key↵3": "val"}
    
    JSON.stringify( objLiteral ); // {"foo":"42","key":"val","key2":"val","key\n3":"val"}

Gli accessor Proprietà oggetto forniscono l'accesso alle proprietà di un oggetto usando la notazione punto o la parentesi.

  1. ► È disponibile un intervallo di valori più limitato (ad es. Nessuna funzione consentita). Un valore può essere una stringa tra virgolette, numero, valore booleano, null, oggetto o matrice. Queste strutture possono essere nidificate.

    var objLiteral = {};
    objLiteral.funKey = function sayHello() {
        console.log('Object Key with function as value - Its outcome message.');
    };
    
    objLiteral['Key'] = 'Val';
    
    console.log('Object Literal Fun : ', objLiteral );
    // Object Literal Fun :  Object {Key: "Val"}Key: "Val"funKey: sayHello()__proto__: Object
    console.log( JSON.stringify( objLiteral ) ); // {"Key":"Val"}

inserisci qui la descrizione dell'immagine


JavaScriptè l'implementazione più popolare dello standard ECMAScript. Le funzionalità principali di Javascript si basano sullo standard ECMAScript, ma Javascript ha anche altre funzionalità aggiuntive che non sono nelle specifiche / standard ECMA. Ogni browser ha un interprete JavaScript.

JavaScript è un linguaggio tipizzato in modo dinamico. Ciò significa che non è necessario specificare il tipo di dati di una variabile quando la si dichiara e i tipi di dati vengono convertiti automaticamente quando necessario durante l'esecuzione dello script.

Literals :

'37' - 7    // 30
'37' + 7    // "377"
+'37' + 7   // 44
+'37'       // 37
'37'        // "37"

parseInt('37');     // 37
parseInt('3.7');    // 3

parseFloat(3.7);    // 3.7

// An alternative method of retrieving a number from a string is with the + (unary plus) operator:
+'3.7'              // 3.7

Object literals RFC 7159

Una struttura di oggetti è rappresentata come una coppia di parentesi graffe che circondano zero o più coppie nome / valore (o membri). Un nome è una stringa. Un singolo punto viene dopo ogni nome, separando il nome dal valore. Una singola virgola separa un valore dal seguente nome. I nomi all'interno di un oggetto DOVREBBERO essere univoci.

ECMAScript supporta l'ereditarietà basata su prototipi. Ogni costruttore ha un prototipo associato e ogni oggetto creato da quel costruttore ha un riferimento implicito al prototipo (chiamato prototipo dell'oggetto) associato al suo costruttore. Inoltre, un prototipo può avere un riferimento implicito non nullo al suo prototipo e così via; questa si chiama catena prototipo.

In un linguaggio orientato agli oggetti basato sulla classe, in generale, lo stato è trasportato da istanze, i metodi sono trasportati da classi e l'eredità è solo di struttura e comportamento. In ECMAScript, lo stato e i metodi sono trasportati da oggetti e la struttura, il comportamento e lo stato sono tutti ereditati.

Un prototipo è un oggetto utilizzato per implementare l'ereditarietà di struttura, stato e comportamento in ECMAScript. Quando un costruttore crea un oggetto, quell'oggetto fa implicitamente riferimento al prototipo associato del costruttore allo scopo di risolvere i riferimenti di proprietà. Il prototipo associato del costruttore può essere referenziato dall'espressione del programma constructor.prototype e le proprietà aggiunte al prototipo di un oggetto sono condivise, tramite ereditarietà, da tutti gli oggetti che condividono il prototipo.


2

Per coloro che pensano ancora che la RFC sia più importante dei blog e delle idee sbagliate basate sull'opinione, proviamo a rispondere chiarendo alcuni punti. Non ripeterò tutte le differenze corrette già menzionate nelle risposte precedenti, qui sto solo cercando di aggiungere valore riassumendo una parte cruciale rfc7159

Estratti da https://tools.ietf.org/html/rfc7159

  1. JavaScript Object Notation (JSON) è un formato di testo per la serializzazione di dati strutturati. È derivato dai letterali oggetto di JavaScript, come definito nello standard ECMAScript Programming Language, terza edizione [ECMA-262].
  2. JSON può rappresentare quattro tipi primitivi (stringhe, numeri, valori booleani e null) e due tipi strutturati ( oggetti e matrici).
  3. Un oggetto è una raccolta non ordinata di zero o più coppie nome / valore, in cui un nome è una stringa e un valore è una stringa, numero, valore booleano, null, oggetto o matrice.
  4. begin-object = ws% x7B ws; {parentesi graffa sinistra
  5. end-object = ws% x7D ws; } parentesi graffa destra
  6. Un valore JSON DEVE essere un oggetto , un array, un numero o una stringa o uno dei seguenti tre nomi letterali: false null true
  7. Una struttura di oggetti è rappresentata da una coppia di parentesi graffe
  8. I nomi all'interno di un oggetto DOVREBBERO essere univoci. object = begin-object [member * (value-separator member)] end-object
  9. Un oggetto i cui nomi sono tutti univoci è interoperabile, nel senso che tutte le implementazioni software che ricevono quell'oggetto saranno d'accordo sulle mappature nome-valore. Quando i nomi all'interno di un oggetto non sono univoci, il comportamento del software che riceve tale oggetto è imprevedibile.
  10. Esempi (da pagina 12 di RFC)

    Questo è un oggetto JSON:

          {
            "Image": {
                "Width":  800,
                "Height": 600,
                "Title":  "View from 15th Floor",
                "Thumbnail": {
                    "Url":    "http://www.example.com/image/481989943",
                    "Height": 125,
                    "Width":  100
                },
                "Animated" : false,
                "IDs": [116, 943, 234, 38793]
              }
          }

    Il membro Image è un oggetto il cui membro Thumbnail è un oggetto e il cui membro ID è un array di numeri.

Non esiste davvero un "oggetto JSON".

Veramente?


1
Davi, non è un Object, è un String. Grazie
abu abu,

1

Per quanto ho capito la differenza principale è la flessibilità .

JSON è una sorta di wrapper su "JavaScript Object Notation" che costringe gli utenti a obbedire a regole più severe per la definizione degli oggetti. E lo fa limitando i possibili modi di dichiarazione degli oggetti forniti dalla funzione Notazione oggetto JavaScript.

Di conseguenza, disponiamo di oggetti più semplici e standardizzati che si adattano meglio allo scambio di dati tra piattaforme.

Quindi, in sostanza, il newObject nel mio esempio sopra è un oggetto definito usando JavaScript Objeect Notation; ma non è un oggetto JSON "valido" perché non segue le regole richieste dagli standard JSON.

Anche questo link è abbastanza utile: http://msdn.microsoft.com/en-us/library/bb299886.aspx


2
Lo scopo di JSON e la notazione degli oggetti è completamente diverso: il primo è utilizzato solo per lo scambio di dati e il secondo è per la creazione di oggetti JS solo per uso interno. Non sono versioni sempre più rigide della stessa cosa.
ilyo

0

Per prima cosa dovresti sapere cos'è JSON:

È un formato di scambio dati indipendente dalla lingua. La sintassi di JSON è stata ispirata dalla notazione letterale Object JavaScript, ma ci sono differenze tra loro.

Ad esempio, in JSON devono essere citate tutte le chiavi, mentre nei valori letterali degli oggetti ciò non è necessario:

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

// Oggetto letterale: var o = {foo: "bar"}; Le virgolette sono obbligatorie su JSON perché in JavaScript (più precisamente in ECMAScript 3rd Edition), l'uso di parole riservate come nomi di proprietà non è consentito, ad esempio:

var o = {if: "foo"}; // SyntaxError in ES3 Mentre, usando una stringa letterale come nome di una proprietà (citando il nome della proprietà) non ci sono problemi:

var o = {"if": "foo"}; Quindi per "compatibilità" (e forse facile valutazione?) Le citazioni sono obbligatorie.

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

stringa numero oggetto array Un letterale come: vero falso nullo La grammatica delle stringhe cambia. Devono essere delimitati da virgolette doppie, mentre in JavaScript puoi usare le virgolette singole o doppie in modo intercambiabile.

// JSON non valido: {"foo": 'bar'} cambia anche la grammatica dei numeri JSON accettata, in JavaScript puoi usare letterali esadecimali, ad esempio 0xFF, o (i famigerati) letterali ottali es. 010. In JSON puoi usare solo letterali decimali.

// JSON non valido: {"foo": 0xFF}


0

Javascript Object Literal vs JSON:

  • La sintassi letterale dell'oggetto è un modo molto conveniente per creare oggetti javascript
  • Il JSONlinguaggio, che sta per "notazione oggetto Javascript", ha la sua sintassi derivata dalla sintassi letterale dell'oggetto javascript. Viene utilizzato come formato di trasferimento di dati testuali indipendente dal linguaggio di programmazione.

Esempio:

Notazione oggetto JS, utilizzata in JS per creare comodamente oggetti nel codice:

const JS_Object = {
  1: 2,  // the key here is the number 1, the value is the number 2
  a: 'b', // the key is the string a, the value is the string b
  func: function () { console.log('hi') }
  // the key is func, the value is the function
}

Esempio di JSON:

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}

Differenze principali:

  • Tutte le chiavi dell'oggetto in JSON devono essere stringhe. In Javascript le chiavi dell'oggetto possono essere stringhe o numeri

  • Tutte le stringhe in JSON devono essere citate tra "virgolette doppie". Mentre in Javascript sono consentite sia virgolette singole che doppie. Anche senza virgolette nella notazione di oggetti Javascript, le chiavi degli oggetti vengono implicitamente inserite in stringhe.

  • In JSON una funzione non può essere definita come un valore di un oggetto (poiché è specifico di Javascript). In Javascript questo è completamente legale.

Javascript incorporato JSONnell'oggetto:

JSONgli oggetti possono essere facilmente convertiti in Javascript e viceversa usando l' JSONoggetto incorporato che Javascript offre nel suo runtime. Per esempio:

const Object = {
  property1: true,
  property2: false,
}; // creating object with JS object literal syntax

const JSON_object = JSON.stringify(Object);  // stringify JS object to a JSON string

console.log(JSON_object); // note that the (string) keys are in double quotes

const JS_object = JSON.parse(JSON_object);  // parse JSON string to JS object

console.log(JS_object.property1, JS_object.property2); 
// accessing keys of the newly created object


0

Ecco una differenza sorprendente: non è possibile utilizzare undefinedin JSON e tutti i campi oggetto con valori indefiniti scompaiono dopoJSON.stringify

let object =  { "a": undefined } ;

let badJSON= '{ "a": undefined }';


console.log('valid JS object :', object );
console.log('JSON from object:', JSON.stringify(object) );
console.log('invalid json    :', JSON.parse(badJSON) );

🙈🙉🙊

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.