JSON, acronimo di JavaScript Object Notation, è una rappresentazione testuale e priva di schemi di dati strutturati e basata su elenchi ordinati. JSON è derivato da JavaScript, ma è supportato in modo nativo o tramite librerie nella maggior parte dei linguaggi di programmazione. JSON è, nella maggior parte dei casi, utilizzato per scambiare informazioni sul web tra client e server .

Quindi, per esempio, tra server e browser oppure tra due server per applicazioni che devono acquisire dati da più fonti. A volte però può essere fonte di problemi, e se un’applicazione web non sta funzionando come dovrebbe, il motivo potrebbe essere proprio in un problema nella lettura o scrittura del file Json che questa scambia con il browser o con un altro server, o che usa come fonte dati.

Se consideriamo gli ultimi quindici anni, possiamo facilmente verificare come JSON sia ormai onnipresente sul web. Ora è il formato scelto per quasi tutti i servizi web disponibili al pubblico e spesso è usato anche per servizi web privati. La sua larga diffusione ha portato anche al supporto nativo di JSON da parte di molti database. Database relazionali, come per esempio PostgreSQL e MySQL, ora sono direttamente forniti con supporto nativo per l’archiviazione e con l’interrogazione dei dati JSON. Anche i database NoSQL, come MongoDB e il database a grafo Neo4j, supportano JSON (anche se MongoDB adotta una versione binaria di JSON leggermente modificata.

In questo articolo ci occupiamo in modo approfondito di JSON e analizzeremo i suoi vantaggi rispetto a XML, i suoi svantaggi, quando dovreste usarlo e quando dovreste considerare altre alternative più idonee. Come prima cosa, vediamo come si comporta JSON nella pratica.

Esempi pratici di JSON

Qui sotto abbiamo un esempio di dati codificati in JSON

screenshot-www.idgns.com-2019-10-28-08-12-47-978

La struttura del codice definisce chiaramente alcuni attributi specifici di una persona. Sono presenti nome e cognome, numero di accessi eseguiti da quella persona, se si tratta di uno scrittore, l’elenco di alcune aziende con cui lavora e quali siano i suoi animali domestici (nel nostro caso ne ha solo uno). Questa semplice struttura potrebbe essere trasferita da un server a un browser web o a un’applicazione mobile. I dati sono visualizzati su un dispositivo e potrebbero essere salvati per usi futuri.

JSON ha il vantaggio di essere un formato di dati generico, con un numero minimo di tipi di valore: stringhe, numeri, elenchi, oggetti e null. La notazione è un sottoinsieme di JavaScript, ma questi tipi sono presenti in tutti i più comuni linguaggi di programmazione. Tutto ciò rende JSON un ottimo candidato per trasmettere dati in grado di superare le barriere di alcune lacune “linguistiche”.

La conversione di JSON in un oggetto JavaScript richiede una riga di codice e nessuna conoscenza preliminare dell’oggetto da analizzare

Come leggere i file JSON

Tutti i dati JSON sono archiviati in file che hanno estensione .json. Sono file di semplice testo e possono essere facilmente aperti, esaminati e interpretati. Come spiegato sul blog SQLizer, questa modalità così semplice è la chiave per l’elevata interoperabilità di JSON. Infatti, quasi tutti i linguaggi di programmazione possono leggere ed elaborare file di testo semplice e sono facili da trasmettere su Internet.

Perché usarlo

La storia dell’interattività sul web si trasforma all’inizio degli anni 2000. A quei tempi il browser serviva soprattutto come client per visualizzare informazioni, e il server doveva preparare il contenuto perché fosse adatto alla visualizzazione. Quando un utente cliccava su un link o un pulsante nel browser, la sua richiesta veniva inviata al server, il server preparava le informazioni modulandole nel formato HTML vigente, e il browser renderizzava l’HTML trasformandolo in una nuova pagina presentata sullo schermo. Appare evidente come questo modello fosse lento e inefficiente. Soprattutto chiedeva al browser di eseguire il rendering di tutto sulla pagina anche se modificava solo una sua parte.

Gli sviluppatori web non potevano che cercare nuove modalità in grado di migliorare l’esperienza utente. Un’importante novità è arrivata con Internet Explorer 5, con la sua capacità di eseguire richieste web in background mentre veniva mostrata una pagina. Era un approccio praticabile per caricare i dati per la visualizzazione in modo incrementale. Quando si cliccava sul pulsante di aggiornamento, non si ricaricava l’intero contenuto della pagina, ma s’innescava una richiesta web che veniva caricata in background. Quando i contenuti venivano caricati, 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

All’inizio di questo importante nuovo modo di pensare al web, i dati erano trasferiti in formato XML usando un protocollo di messaggistica chiamato SOAP (Simple Object Access Protocol). Purtroppo, XML era difficile da gestire in JavaScript. JavaScript aveva già degli oggetti, il suo modo per esprimere i dati all’interno del linguaggio: Douglas Crockford prese un sottoinsieme di quell’espressione come specifica per un nuovo formato di scambio di dati e lo chiamò JSON. Questo nuovo linguaggio era molto più facile da leggere per le persone e da analizzare per i browser.

Presto si è imposta un’altra tecnologia di servizi web, detta Representational State Transfer o REST. Nel trasferimento dati ha prevalso su SOAP. Il vantaggio principale garantito da API REST è poter usare più formati di dati, non solo XML, ma anche JSON e HTML. Quando, per i vantaggi sopra elencati, gli sviluppatori web hanno preferito JSON rispetto a XML, hanno preferito anche REST a SOAP. Kostyantyn Kharchenko, sul blog Svitla, ha scritto “Il successo di REST è dovuto al formato JSON e grazie al suo facile utilizzo su varie piattaforme”. Oggi JSON è lo standard per lo scambio di dati tra client web e mobile e servizi di back-end.

La principale alternativa a JSON è XML, ma XML sta diventando sempre meno comune ed è facile capirne il perché

JSON vs. XML

La principale alternativa a JSON è XML. XML sta, però, diventando sempre meno comune ed è facile capirne il perché. Ecco una versione XML del codice mostrato prima.

screenshot-www.idgns.com-2019-10-28-08-12-59-354

Appare evidente come sia più lungo, (in questo caso il doppio del codice in JSON), ma soprattutto XML, quando analizza una struttura di dati compatibile con JavaScript, ha alcune ambiguità. La conversione di XML in un oggetto JavaScript può richiedere decine o centinaia di righe di codice, e alla fine richiede anche una personalizzazione basata sull’oggetto specifico da analizzare. La conversione di JSON in un oggetto JavaScript richiede invece una riga di codice e nessuna conoscenza preliminare dell’oggetto da analizzare.

JSON ha anche dei limiti

JSON è un formato dati conciso e flessibile con cui è facile lavorare in molti linguaggi di programmazione, ma ha anche alcuni svantaggi che è bene conoscere. I cinque principali sono questi.

  • Nessuno schema: ciò flessibilità nel rappresentare i dati nel modo desiderato, ma vuole anche dire che potreste accidentalmente creare molto facilmente dati “deformati”
  • Solo un tipo di numero: non potete quindi sfruttare i diversi e variegati tipi di numeri disponibili in molti linguaggi di programmazione
  • Nessun tipo di data: a causa di questa mancanza, gli sviluppatori devono ricorrere all’uso di rappresentazioni di stringhe di date, con conseguenti discrepanze di formattazione, o devono rappresentare le date sotto forma di millisecondi dall’epoca (1 gennaio 1970)
  • Nessun commento: ciò rende impossibile eseguire annotazioni in linea, incrementando la probabilità d’incomprensioni
  • Verbosità: anche se JSON è più breve di XML, non è il formato di scambio di dati più conciso. Per servizi a elevato volume o per scopi speciali, è consigliabile usare formati di dati più efficienti

Quando usare JSON

Come formato dei dati, dovreste scegliere JSON se state scrivendo un software che comunica con un browser o un’app mobile nativa. L’uso di un formato come XML è una scelta obsoleta, e sarà un probabile ostacolo per i talenti che vorreste attirare.

Se dovete garantire una comunicazione da server a server, potreste trovarvi meglio usando un framework di serializzazione come Apache Avro o Apache Thrift. In questo ambito JSON non è male come scelta, potrebbe essere proprio ciò di cui avete bisogno, ma non aspettatevi la stessa “chiarezza” che avete quando avete a che fare con comunicazione web e mobile.

Se state lavorando con un database NoSQL, siete costretti a usare tutto ciò che vi offre il database stesso. Nei database relazionali che supportano JSON, una buona regola empirica è quella di usarlo il meno possibile. I database relazionali sono stati ottimizzati per dati strutturati che si adattano a uno schema particolare. La maggior parte ora supporta dati più flessibili sotto forma di JSON, ma, quando si esegue una query per le proprietà all’interno degli oggetti JSON, ci si può aspettare un impatto negativo sulle prestazioni .

Fortunatamente, JSON è ormai il formato de facto per l’invio di dati tra server web, browser e applicazioni mobile. Il suo design è semplice da leggere e comprendere e, nella maggior parte dei casi, è anche facile da manipolare in qualsiasi linguaggio di programmazione. Il vantaggio offerto dalla mancanza di uno schema rigoroso, garantisce anche una notevole flessibilità, che a volte può, però, rendere difficile la lettura e la scrittura corretta di JSON.

Parser: cosa sono e a cosa servono

Parser è la parte del codice di un’applicazione che trasforma i dati archiviati come JSON in un formato che l’applicazione può utilizzare. JavaScript, come prevedibile, include un parser nativo, il metodo JSON.parse(). Per utilizzare JSON in linguaggi come Scala o Elm, potreste dover lavorare un po’ di più, ma l’adozione diffusa di JSON garantisce la presenza di librerie e programmi di utilità per aiutarvi in tutti i task più difficili. Il sito web json.org mette a disposizione un elenco completo di librerie di codici che è possibile utilizzare per analizzare, generare e manipolare JSON in linguaggi diversi come Python, C # e COBOL.

Utility per JSON

Se state manipolando o esaminando i dati codificati in JSON, senza scrivere voi stessi il codice, potete sfruttare alcune utility online che possono aiutarvi.

  • Formattatore per JSON: JSONLint è uno strumento web che formatta e convalida codice JSON a piacere
  • Visualizzare JSON: Stack.hu ha un sito che crea un albero interattivo per aiutarvi a comprendere la struttura del vostro codice JSON
  • Convertitore per JSON: se dovete spostare rapidamente i dati da un formato JSON a qualcos’altro, Convertcsv.com vi mette a disposizione strumenti che possono convertire JSON in CSV (può quindi essere aperto in Excel) o XML.

Tutorial JSON

Se volete saperne di più o comunque volete approfondire specifiche e operatività con JSON, potete visitare alcuni utilissimi siti. Mozilla Developer Network ha un ottimo tutorial, perfetto per cominciare a conoscere JSON e JavaScript. Se poi volete passare ad altri linguaggi di programmazione, consultate il tutorial sull’uso di JSON con Java (Baeldung), con Python (DataCamp) o con C# (Software Testing Help). Buon lavoro!