Che cos'è JSON e perché dovrei usarlo?


542

Ho cercato su Wikipedia e cercato su Google e letto la documentazione ufficiale, ma non sono ancora arrivato al punto in cui capisco davvero cos'è JSON e perché lo uso.

Sto sviluppando applicazioni usando PHP, MySQL e Javascript / HTML per un po ', e se JSON può fare qualcosa per rendere la mia vita più facile o il mio codice migliore o la mia interfaccia utente migliore, allora mi piacerebbe saperlo. Qualcuno può darmi una spiegazione concisa?


2
JSON è un sottoinsieme di YAML yaml.org
Brad Gilbert il

15
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use- questo è un bell'esempio di utilizzo semplice
Tom


1
+ Brad Gilbert Non proprio - è un modo personale per esprimere i dati ed è simile a JSON solo perché entrambi esprimono oggetti come stringhe (in modo simile a XML o plist o molti altri), ma JSON è migliore per la scrittura automatica e YAML per la scrittura umana .
Ben Aubin,

Risposte:


649

JSON (JavaScript Object Notation) è un formato leggero utilizzato per lo scambio di dati. Si basa su un sottoinsieme del linguaggio JavaScript (il modo in cui gli oggetti sono creati in JavaScript). Come affermato in MDN , alcuni JavaScript non sono JSON e alcuni JSON non sono JavaScript.

Un esempio di dove viene utilizzato sono le risposte dei servizi Web. Ai vecchi tempi, i servizi Web utilizzavano XML come formato di dati primario per la trasmissione di dati di ritorno, ma da quando è apparso JSON ( il formato JSON è specificato in RFC 4627 da Douglas Crockford ), è stato il formato preferito perché è molto più leggero

Puoi trovare molte più informazioni sul sito ufficiale JSON .

JSON è costruito su due strutture:

  • Una raccolta di coppie nome / valore. In varie lingue, questo viene realizzato come oggetto, record, struct, dizionario, tabella hash, elenco con chiave o array associativo.
  • Un elenco ordinato di valori. Nella maggior parte delle lingue, questo viene realizzato come una matrice, un vettore, un elenco o una sequenza.

Struttura JSON



Diagramma oggetto JSON

Diagramma di matrice JSON

Diagramma del valore JSON

Diagramma di stringa JSON

Diagramma numerico JSON

Ecco un esempio di dati JSON:

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JSON in JavaScript

JSON (in Javascript) è una stringa!

Le persone spesso assumono che tutti gli oggetti Javascript siano JSON e che JSON sia un oggetto Javascript. Questo non è corretto

In Javascript nonvar x = {x:y} è JSON , questo è un oggetto Javascript . I due non sono la stessa cosa. L'equivalente JSON (rappresentato nel linguaggio Javascript) sarebbe var x = '{"x":"y"}'. xè un oggetto di tipo stringa non un oggetto a sé stante. Per trasformare questo in un oggetto JavaScript a tutti gli effetti è necessario prima analizzarlo, var x = JSON.parse('{"x":"y"}');,x ora è un oggetto ma questo non è più JSON.

Vedi oggetto Javascript Vs JSON


Quando si lavora con JSON e JavaScript, si può essere tentati di utilizzare la evalfunzione per valutare il risultato restituito nel callback, ma ciò non è suggerito poiché ci sono due caratteri (U + 2028 e U + 2029) validi in JSON ma non in JavaScript (leggi di più qui ).

Pertanto, si deve sempre provare a utilizzare lo script di Crockford che verifica la presenza di un JSON valido prima di valutarlo. Il link alla spiegazione dello script si trova qui ed ecco un link diretto al file js. Oggi tutti i principali browser hanno una propria implementazione per questo.

Esempio su come utilizzare il parser JSON (con il json dallo snippet di codice sopra):

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

Il parser JSON offre anche un altro metodo molto utile, stringify. Questo metodo accetta un oggetto JavaScript come parametro e restituisce una stringa con formato JSON. Ciò è utile per quando si desidera inviare nuovamente i dati al server:

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

I due metodi precedenti ( parsee stringify) accettano anche un secondo parametro, che è una funzione che verrà chiamata per ogni chiave e valore a ogni livello del risultato finale e ogni valore verrà sostituito dal risultato della funzione immessa. (Maggiori informazioni qui )

A proposito, per tutti voi là fuori che pensano che JSON sia solo per JavaScript, dai un'occhiata a questo post che spiega e conferma il contrario.


Riferimenti


1
Indipendentemente dal modo in cui le informazioni sono serializzate, avrai un parser, giusto? Pertanto, a chi importa quale formato utilizzi per trasmettere i dati se i dettagli dell'implementazione verranno sottratti.
Tom Lehman,

6
Bene, in realtà, se stai trasmettendo dati da e verso il client e il server, penso che sia abbastanza importante fare attenzione alle dimensioni della tua risposta.
Andreas Grech,

9
Per il pedante, ci sono un paio di personaggi che JSON gestisce in modo diverso da JavaScript, impedendo che sia un sottoinsieme rigoroso: timelessrepo.com/json-isnt-a-javascript-subset
Jeremy Banks

Quando dici che è più leggero dell'XML ti riferisci alla dimensione del file o il peso leggero ha un significato spaziale nella codifica?
whatahitson,

1
Quindi sostituiresti XML con JSON? È questo che dici? Se è così ... Fantastico, XML è un incubo.
James111,

66

Il concetto spiegato - Nessun codice o gergo tecnico

Che cos'è JSON? - Come l'ho spiegato a mia moglie TM

Io: “Fondamentalmente è un modo di comunicare con qualcuno per iscritto .... ma con regole molto specifiche.

Moglie: sì ....?

Me: nell'inglese prosaico, le regole sono piuttosto rigide: proprio come nel combattimento con la gabbia. Non così con JSON. Esistono molti modi per descrivere qualcosa:

• Esempio 1: la nostra famiglia ha 4 persone: tu, io e 2 bambini.

• Esempio 2: la nostra famiglia: tu, io, kid1 e kid2.

• Esempio 3: Famiglia: [tu, io, kid1, kid2]

• Esempio 4: abbiamo 4 persone nella nostra famiglia: mamma, papà, kid1 e kid2.

Moglie: Perché non usano semplicemente l'inglese semplice?

Io: Lo farebbero, ma ricorda che abbiamo a che fare con i computer. Un computer è stupido e non sarà in grado di capire le frasi. Quindi dobbiamo essere molto specifici quando sono coinvolti i computer, altrimenti si confondono. Inoltre, JSON è un modo abbastanza efficace di comunicare, quindi la maggior parte delle cose irrilevanti viene tagliata, il che è piuttosto mano. Se volevi comunicare la nostra famiglia, a un computer, un modo per farlo è come questo:

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

…… e questo è fondamentalmente JSON. Ma ricorda, DEVI obbedire alle regole grammaticali JSON. Se infrangi queste regole, un computer semplicemente non capirà (cioè analizzerà) ciò che stai scrivendo.

Moglie: Quindi come scrivo in Json?

Un buon modo sarebbe quello di utilizzare un serializzatore JSON, che è una libreria che fa il lavoro pesante per te.

Sommario

JSON è fondamentalmente un modo di comunicare i dati a qualcuno, con regole molto, molto specifiche. Utilizzo di coppie e matrici di valori chiave. Questo è il concetto spiegato, a questo punto vale la pena leggere le regole specifiche sopra.


48

In breve: JSON è un modo di serializzare in modo tale da diventare codice JavaScript. Quando eseguito (con eval o altro), questo codice crea e restituisce un oggetto JavaScript che contiene i dati serializzati. Questo è disponibile perché JavaScript consente la seguente sintassi:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

Puoi usarlo per diversi scopi. Per uno, è un modo comodo per passare i dati dal backend del tuo server al tuo codice JavaScript. Pertanto, questo è spesso usato in AJAX.

Puoi anche usarlo come meccanismo di serializzazione autonomo, che è più semplice e occupa meno spazio di XML. Esistono molte librerie che consentono di serializzare e deserializzare oggetti in JSON per vari linguaggi di programmazione.


31

In breve, è una notazione di scripting per il passaggio di dati. In qualche modo un'alternativa all'XML, che supporta nativamente tipi di dati di base, array e array associativi (coppie nome-valore, chiamate Oggetti perché è quello che rappresentano).

La sintassi è quella utilizzata in JavaScript e JSON stesso sta per "Notazione oggetto JavaScript". Tuttavia è diventato portatile e viene utilizzato anche in altre lingue.

Un link utile per i dettagli è qui:

http://secretgeek.net/json_3mins.asp


19

Il formato JSON viene spesso utilizzato per serializzare e trasmettere dati strutturati su una connessione di rete. Viene utilizzato principalmente per trasmettere dati tra un server e un'applicazione Web, fungendo da alternativa a XML.


16

JSON è notazione oggetto JavaScript. È un modo molto più compatto di trasmettere set di dati attraverso connessioni di rete rispetto a XML. Suggerisco di utilizzare JSON in qualsiasi applicazione simile ad AJAX in cui XML sarebbe altrimenti l'opzione "consigliata". La verbosità di XML si aggiungerà al tempo di download e all'aumento del consumo di larghezza di banda ($$$). Puoi ottenere lo stesso effetto con JSON e il suo mark-up è quasi esclusivamente dedicato ai dati stessi e non alla struttura sottostante.


11

la risposta breve comune è: se si utilizza AJAX per effettuare richieste di dati, è possibile inviare e restituire facilmente oggetti come stringhe JSON. Estensioni disponibili per il supporto Javascript a JSON () chiama tutti i tipi di JavaScript per l'invio di dati al server in una richiesta AJAX. Le risposte AJAX possono restituire oggetti come stringhe JSON che possono essere convertiti in oggetti Javascript con una semplice chiamata eval, ad esempio se la funzione AJAX restituita da SomeAjaxFunctionCallReturningJson

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

potresti scrivere in Javascript

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON può essere utilizzato anche per payload del servizio Web e altri, ma è davvero conveniente per i risultati AJAX.

  • Aggiornamento (dieci anni dopo): non farlo, usa JSON.parse

1
Con eval (), tutto sarebbe valutato. è un rischio per la sicurezza.
Thomas Weller,

@ThomasWeller sì, questa risposta è antica, andrei con JSON.parse ora grazie!
Steven A. Lowe,

8

Mi piace JSON principalmente perché è così conciso . Per i contenuti web che possono essere compressi con gzip, questo non è necessariamente un grosso problema (quindi perché x html è così popolare). Ma ci sono occasioni in cui questo può essere utile.

Ad esempio, per un progetto stavo trasmettendo informazioni che dovevano essere serializzate e trasmesse tramite XMPP . Dato che la maggior parte dei server limiterà la quantità di dati che è possibile trasmettere in un singolo messaggio, ho trovato utile utilizzare JSON sull'ovvia alternativa XML.

Come bonus aggiuntivo, se hai familiarità con Python o Javascript, conosci già JSON e puoi interpretarlo senza molta formazione.


8

Che cos'è JSON?

JavaScript Object Notation (JSON) è un formato di interscambio di dati leggero ispirato agli oggetti letterali di JavaScript.

I valori JSON possono essere costituiti da:

oggetti (raccolte di coppie nome-valore) matrici (elenchi di valori ordinati) stringhe (tra virgolette doppie) numeri true, false o null

JSON è indipendente dalla lingua.

JSON con PHP?

Dopo PHP versione 5.2.0, l'estensione JSON è decodifica e codifica le funzionalità come predefinite.

Json_encode - restituisce la rappresentazione JSON dei valori Json_decode - Decodifica la stringa JSON Json_last_error - Restituisce l'ultimo errore occorso.

Sintassi e regole JSON?

La sintassi JSON deriva dalla sintassi della notazione oggetto JavaScript:

I dati sono in coppie nome / valore I dati sono separati da virgole Le parentesi graffe mantengono gli oggetti Le parentesi quadre tengono le matrici


4

Dobbiamo fare un progetto al college e abbiamo riscontrato un grosso problema, si chiama Same Origin Policy. Inoltre, rende il tuo metodo XMLHttpRequest da Javascript non in grado di effettuare richieste a domini diversi dal dominio su cui si trova il tuo sito.

Ad esempio, non è possibile effettuare una richiesta a www.otherexample.com se il sito è su www.example.com. JSONRequest lo consente, ma otterrai il risultato in formato JSON se quel sito lo consente (ad esempio ha un servizio web che restituisce messaggi in JSON). Questo è un problema in cui potresti usare JSON forse.

Ecco qualcosa di pratico: Yahoo JSON


4

La differenza tra JSON e la sintassi convenzionale sarebbe la seguente (in Javascript)

Convenzionale

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","mike.Anderson@office.com");

Con JSON

se utilizziamo JSON possiamo definire in modo diverso come

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

La cosa importante che dobbiamo ricordare è che, se dobbiamo costruire la classe "Employee" o modale con 100 elementi senza il metodo JSON, dobbiamo analizzare tutto durante la creazione della classe. Ma con JSON possiamo definire gli oggetti in linea solo quando viene definito un nuovo oggetto per la classe.

quindi questa riga di seguito è il modo di fare le cose con JSON (solo un modo semplice per definire le cose)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

2
Non è esattamente JSON - è un oggetto Javascript (non JSON)
Ben Aubin,

4

A volte viene fornito tecnicismo laddove non è richiesto nessuno, e mentre molte delle risposte più votate sono accuratamente tecniche e specifiche, personalmente non penso che siano più facili da capire o sintetiche, come ciò che può essere trovato su Wikipedia o in documentazione ufficiale.

Il modo in cui mi piace pensare a JSON è esattamente quello che è: una lingua in un mondo di lingue diverse. Tuttavia, la differenza tra JSON e altre lingue è che "tutti" "parlano" JSON, insieme alla loro "lingua madre".

Usando un esempio del mondo reale, facciamo finta di avere tre persone. Una persona parla di Igbo come lingua madre. La seconda persona vorrebbe interagire con la prima persona, tuttavia, la prima persona parla Yoruba come prima lingua.

Cosa possiamo fare?

Per fortuna, la terza persona nel nostro esempio è cresciuta parlando inglese, ma parla anche entrambi Igbo che Yoruba come seconda lingua, e quindi può fungere da intermediario tra le prime due persone.

Nel mondo della programmazione, la prima "persona" è Python, la seconda "persona" è Ruby, e la terza "persona" è JSON, che per caso riesce a "tradurre" Ruby in Python e viceversa! Ora, ovviamente, questa analogia non è perfetta, ma, essendo una persona bilingue, credo sia un modo semplice di vedere come JSON interagisce con altri linguaggi di programmazione.


2

È molto semplice. JSON sta per Java Script Object Notation. Consideralo come un'alternativa all'utilizzo di XML per il trasferimento di dati tra componenti software.

Ad esempio, di recente ho scritto un sacco di servizi Web che hanno restituito JSON e alcuni sviluppatori Javascript hanno quindi scritto codice che chiamava i servizi e consumava le informazioni restituite in quel formato.


2

JSON (notazione oggetto Javascript) è un formato dati leggero per lo scambio / trasferimento di dati. È nella coppia di valori-chiave come è JavaScript. Per l'API REST è ampiamente utilizzato per il trasferimento di dati dal server al client. Oggi molti dei siti di social media lo utilizzano. Anche se non lo vedo robusto come XML rispetto ai tipi di dati. XML ha tipi di dati molto ricchi e XSD. JSON è un po 'carente in questo.

Per la stessa quantità di dati stringa, JSON sarà più leggero rispetto a XML poiché XML ha tutti quei tag di apertura e chiusura, ecc ...


0

Nel contesto Java, uno dei motivi per cui JSON potrebbe voler essere utilizzato, è che fornisce un'ottima alternativa al framework di serializzazione di Java, che ha dimostrato (storicamente) di essere soggetto ad alcune vulnerabilità abbastanza serie.

Joshua Bloch ne discute approfonditamente nell'articolo 85 "Preferisci alternative alla serializzazione Java" (3a edizione effettiva di Java)

La serializzazione di Java inizialmente doveva tradurre le strutture di dati in un formato che potesse essere facilmente trasmesso o archiviato. JSON soddisfa questo requisito, senza i gravi exploit di cui sopra.


-3

Prova il seguente codice per analizzare la tua risposta php json: read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo riguardo a come e / o perché risolve il problema migliorerebbe il valore a lungo termine della risposta.
Nic3500,
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.