Cos'è JSON? Un formato migliore per lo scambio di dati

JavaScript Object Notation è una rappresentazione testuale e senza schema di dati strutturati che si basa su coppie chiave-valore ed elenchi ordinati. Sebbene JSON sia derivato da JavaScript, è supportato in modo nativo o tramite librerie nella maggior parte dei principali linguaggi di programmazione. JSON è comunemente, ma non esclusivamente, utilizzato per lo scambio di informazioni tra client Web e server Web. 

Negli ultimi 15 anni, JSON è diventato onnipresente sul Web. Oggi è il formato preferito da quasi tutti i servizi Web disponibili pubblicamente ed è spesso utilizzato anche per i servizi Web privati.

La popolarità di JSON ha anche portato al supporto JSON nativo da parte di molti database. I database relazionali come PostgreSQL e MySQL ora vengono forniti con supporto nativo per l'archiviazione e l'interrogazione di dati JSON. I database NoSQL come MongoDB e Neo4j supportano anche JSON, sebbene MongoDB utilizzi una versione binaria leggermente modificata di JSON dietro le quinte.

In questo articolo, daremo una rapida occhiata a JSON e discuteremo da dove proviene, i suoi vantaggi rispetto a XML, i suoi svantaggi, quando dovresti usarlo e quando dovresti considerare delle alternative. Ma prima, immergiamoci nel nocciolo duro di come appare JSON in pratica.

Esempio JSON

Ecco un esempio di dati codificati in JSON:

{

  "FirstName": "Jonathan",

  "LastName": "Freeman",

  "LoginCount": 4,

  "IsWriter": true,

  "WorksWith": ["Spantree Technology Group", ""],

  "Animali domestici": [

    {

      "Name": "Lilly",

      "Type": "Raccoon"

    }

  ]

}

La struttura sopra definisce chiaramente alcuni attributi di una persona. Include un nome e un cognome, il numero di volte in cui la persona ha effettuato l'accesso, se questa persona è uno scrittore, un elenco di aziende con cui lavora e un elenco degli animali domestici della persona (solo uno, in questo caso). Una struttura come quella sopra può essere passata da un server a un browser web o un'applicazione mobile, che eseguirà quindi alcune azioni come visualizzare i dati o salvarli per riferimento futuro.

JSON è un formato di dati generico con un numero minimo di tipi di valore: stringhe, numeri, booleani, elenchi, oggetti e null. Sebbene la notazione sia un sottoinsieme di JavaScript, questi tipi sono rappresentati in tutti i linguaggi di programmazione comuni, rendendo JSON un buon candidato per trasmettere dati attraverso le lacune linguistiche.

File JSON

I dati JSON vengono archiviati in file che terminano con l'estensione .json. In linea con l'etica leggibile dall'uomo di JSON, questi sono semplicemente file di testo semplice e possono essere facilmente aperti ed esaminati. Come spiega il blog di SQLizer, questa è anche una chiave per la più ampia interoperabilità di JSON, poiché quasi tutte le lingue che puoi nominare possono leggere ed elaborare file di testo semplice e sono facili da inviare su Internet.

Perché dovrei usare JSON? 

Per comprendere l'utilità e l'importanza di JSON, dovremo comprendere un po 'la storia dell'interattività sul web. 

All'inizio degli anni 2000, l'interattività sul web ha iniziato a trasformarsi. A quel tempo, il browser fungeva principalmente da client stupido per visualizzare le informazioni e il server ha svolto tutto il duro lavoro per preparare il contenuto per la visualizzazione. Quando un utente fa clic su un collegamento o un pulsante nel browser, viene inviata una richiesta al server, il server prepara le informazioni necessarie come HTML e il browser visualizza l'HTML come una nuova pagina. Questo modello era lento e inefficiente e richiedeva al browser di rieseguire il rendering di tutto sulla pagina anche se solo una sezione della pagina era cambiata.

Poiché i ricaricamenti a pagina intera erano costosi, gli sviluppatori web hanno guardato a tecnologie più recenti per migliorare l'esperienza utente complessiva. Nel frattempo, la capacità di effettuare richieste web in background durante la visualizzazione di una pagina, che era stata recentemente introdotta in Internet Explorer 5, si stava dimostrando un approccio praticabile al caricamento incrementale dei dati per la visualizzazione. Invece di ricaricare l'intero contenuto della pagina, fare clic sul pulsante di aggiornamento attiverebbe una richiesta web che verrebbe caricata in background. Una volta caricati i contenuti, i dati potevano essere manipolati, salvati e visualizzati sulla pagina utilizzando JavaScript, il linguaggio di programmazione universale nei browser.

REST vs. SOAP: la connessione JSON

In origine, questi dati venivano trasferiti in formato XML (vedi sotto per un esempio) utilizzando un protocollo di messaggistica chiamato SOAP (Simple Object Access Protocol). Ma XML era dettagliato e difficile da gestire in JavaScript. JavaScript aveva già oggetti, che sono un modo per esprimere i dati all'interno del linguaggio, quindi Douglas Crockford ha preso un sottoinsieme di tale espressione come specifica per un nuovo formato di scambio di dati e lo ha soprannominato JSON. JSON era molto più facile da leggere per le persone e per i browser da analizzare.

Nel corso degli anni 2000, un'altra tecnologia di servizi Web, chiamata Representational State Transfer, o REST, ha iniziato a sorpassare SOAP allo scopo di trasferire dati. Uno dei grandi vantaggi della programmazione utilizzando le API REST è che puoi utilizzare più formati di dati, non solo XML, ma anche JSON e HTML. Poiché gli sviluppatori web hanno iniziato a preferire JSON a XML, anche loro hanno preferito REST rispetto a SOAP. Come ha scritto Kostyantyn Kharchenko sul blog Svitla, "Per molti versi, il successo di REST è dovuto al formato JSON grazie al suo facile utilizzo su varie piattaforme".

Oggi, JSON è lo standard de facto per lo scambio di dati tra client Web e mobili e servizi di back-end. 

JSON contro XML

Come notato sopra, l'alternativa principale a JSON è XML. Tuttavia, XML sta diventando sempre meno comune nei nuovi sistemi ed è facile capire perché. Di seguito è riportata una versione dei dati che hai visto sopra, questa volta in XML:

  Jonathan

  Freeman

  4

  vero

    Spantree Technology Group

      Lilly

      Procione

Oltre ad essere più dettagliato (esattamente il doppio in questo caso), XML introduce anche alcune ambiguità durante l'analisi in una struttura dati compatibile con JavaScript. La conversione di XML in un oggetto JavaScript può richiedere da decine a centinaia di righe di codice e alla fine richiede la personalizzazione in base all'oggetto specifico da analizzare. La conversione di JSON in un oggetto JavaScript richiede una riga di codice e non richiede alcuna conoscenza preliminare dell'oggetto da analizzare.

Limitazioni di JSON

Sebbene JSON sia un formato di dati relativamente conciso e flessibile con cui è facile lavorare in molti linguaggi di programmazione, il formato presenta alcuni svantaggi. Ecco le cinque principali limitazioni: 

  1. Nessuno schema. Da un lato, ciò significa che hai la flessibilità totale per rappresentare i dati nel modo che desideri. Dall'altro, significa che potresti creare accidentalmente dati deformi molto facilmente.
  2. Un solo tipo di numero: il formato a virgola mobile a precisione doppia IEEE-754. È un bel boccone, ma significa semplicemente che non puoi sfruttare i tipi di numeri diversi e sfumati disponibili in molti linguaggi di programmazione.
  3. Nessun tipo di data. Questa omissione significa che gli sviluppatori devono ricorrere all'uso di rappresentazioni di stringhe di date, portando a discrepanze di formattazione, o devono rappresentare le date sotto forma di millisecondi dall'epoca (1 gennaio 1970).
  4. Non ci sono commenti. Ciò rende impossibile annotare i campi in linea, richiedendo ulteriore documentazione e aumentando la probabilità di malintesi.
  5. Verbosità. Sebbene JSON sia meno dettagliato di XML, non è il formato di scambio dati più conciso. Per i servizi ad alto volume o per scopi speciali, ti consigliamo di utilizzare formati di dati più efficienti.

Quando dovrei usare JSON?

Se stai scrivendo un software che comunica con un browser o un'applicazione mobile nativa, dovresti utilizzare JSON come formato dati. Utilizzare un formato come XML è una scelta obsoleta e una bandiera rossa per i talenti front-end e mobili che altrimenti vorresti attirare.

Nel caso della comunicazione da server a server, potrebbe essere meglio utilizzare un framework di serializzazione come Apache Avro o Apache Thrift. JSON non è una cattiva scelta qui e potrebbe comunque essere esattamente ciò di cui hai bisogno, ma la risposta non è così chiara come per la comunicazione web e mobile.

Se stai usando database NoSQL, sei praticamente bloccato con tutto ciò che il database ti offre. Nei database relazionali che supportano JSON come tipo, una buona regola pratica è usarlo il meno possibile. I database relazionali sono stati ottimizzati per dati strutturati che si adattano a uno schema particolare. Sebbene la maggior parte ora supporti dati più flessibili sotto forma di JSON, puoi aspettarti un calo delle prestazioni quando esegui query per le proprietà all'interno di quegli oggetti JSON.

JSON è il formato onnipresente, de facto, per l'invio di dati tra server Web, browser e applicazioni mobili. Il suo design semplice e la sua flessibilità lo rendono facile da leggere e capire e, nella maggior parte dei casi, facile da manipolare nel linguaggio di programmazione scelto. La mancanza di uno schema rigoroso consente la flessibilità del formato, ma tale flessibilità a volte rende difficile assicurarsi di leggere e scrivere correttamente JSON.

Parser JSON

La parte del codice di un'applicazione che trasforma i dati archiviati come JSON in un formato che l'applicazione può utilizzare è chiamata parser. JavaScript, come ci si aspetterebbe, include un parser nativo, il metodo JSON.parse ().

Potrebbe essere necessario lavorare un po 'di più per lavorare con JSON in linguaggi fortemente tipizzati come Scala o Elm, ma l'adozione diffusa di JSON significa che ci sono librerie e utilità per aiutarti in tutte le parti più difficili. 

Il sito Web json.org include un elenco completo di librerie di codice che puoi utilizzare per analizzare, generare e manipolare JSON, in linguaggi diversi come Python, C # e COBOL.

Utilità JSON

Se stai cercando di manipolare o esaminare direttamente i dati codificati JSON, senza scrivere codice da solo, ci sono una serie di utilità online che possono aiutarti. Tutti gli equivalenti programmatici nelle librerie di codice collegate sopra, ma puoi tagliare e incollare il codice JSON in questi strumenti basati su browser per aiutarti a capire meglio JSON o eseguire analisi rapide e sporche:

  • Formattatore JSON: JSONLint formatterà e convaliderà il codice JSON arbitrario.
  • Visualizzatore JSON: Stack.hu ha un sito che creerà un albero interattivo per aiutarti a comprendere la struttura del tuo codice JSON. 
  • Beautifier JSON: se vuoi "stampare bene" il tuo codice JSON, con la colorazione della sintassi e simili, Prettydiff può aiutarti. 
  • Convertitore JSON: hai bisogno di spostare rapidamente i dati da un formato JSON a qualcos'altro? Convertcsv.com dispone di strumenti in grado di convertire JSON in CSV (che può quindi essere aperto in Excel) o XML.

Tutorial JSON

Pronto per immergerti e saperne di più su come lavorare con JSON nelle tue applicazioni interattive? Mozilla Developer Network ha un fantastico tutorial che ti consentirà di iniziare con JSON e JavaScript. Se sei pronto per passare ad altre lingue, dai un'occhiata al tutorial sull'uso di JSON con Java (da Baeldung), con Python (da DataCamp) o con C # (da Software Testing Help). In bocca al lupo!

Josh Fruhlinger ha contribuito a questo articolo.