Introduzione

JSON - abbreviazione di JavaScript Object Notation - è un formato per la condivisione di dati. Come suggerisce il nome, JSON deriva dal linguaggio di programmazione JavaScript, ma è disponibile per l'uso in molti linguaggi tra cui Python, Ruby, PHP e Java. JSON è generalmente pronunciato come il nome "Jason".

JSON utilizza l'estensione .json. Quando è definito in un altro formato di file (come in .html), può apparire all'interno delle virgolette come una stringa JSON o può essere un oggetto assegnato a una variabile. Questo formato è facile da trasmettere tra web server e client o browser.

Leggibile e leggero, JSON offre una buona alternativa all'XML e richiede molto meno formattazione. Questa guida informativa ti consentirà di essere sempre aggiornato con i dati che puoi utilizzare nei file JSON e con la struttura e la sintassi generali di questo formato.

Sintassi e struttura

Un oggetto JSON è un formato di dati valore-chiave (key-value) che viene in genere reso in parentesi graffe. Quando lavori con JSON, probabilmente vedrai oggetti JSON in un file .json, ma possono anche esistere come oggetto o stringa JSON nel contesto di un programma.

Un oggetto JSON è simile al seguente:

{
  "first_name" : "Noviello",
  "last_name" : "Shark",
  "location" : "Ocean",
  "online" : true,
  "followers" : 987
}

Anche se questo è un esempio molto breve e JSON potrebbe essere lungo molte righe, questo dimostra che il formato è generalmente impostato con due parentesi graffe { } su entrambe le estremità e con coppie key-value. La maggior parte dei dati utilizzati in JSON finisce per essere incapsulata in un oggetto JSON.

Le coppie key-value hanno due punti tra loro come in "key" : "value". Ciascuna coppia di key-value è separato da una virgola, in modo che il centro di un JSON è generalmente come questo: "key" : "value", "key" : "value", "key": "value". Nel nostro esempio sopra, la prima coppia key-value è "first_name" : "NoviellO".

Le key JSON si trovano sul lato sinistro dei due punti. Devono essere racchiusi tra virgolette doppie, come in "key", e possono essere qualsiasi stringa valida. All'interno di ogni oggetto, le chiavi devono essere uniche. Queste stringhe chiave possono includere spazi bianchi, come in "first name", ma ciò può rendere più difficile l'accesso durante la programmazione, quindi è meglio usare caratteri di sottolineatura, come in "first_name".

I value JSON si trovano a destra dei due punti. Questi devono essere uno dei 6 tipi di dati semplici:

  • stringhe
  • numeri
  • oggetti
  • array
  • Booleani (vero o falso)
  • nullo

A livello più ampio, i valori possono anche essere costituiti dai tipi di dati complessi di oggetti o array JSON, descritti nei paragrafi successivi.

Ognuno dei tipi di dati passati come valori in JSON manterrà la propria sintassi, quindi le stringhe saranno tra virgolette, ma i numeri non lo saranno.

Sebbene nei file .json, in genere vedremo il formato espanso su più righe, JSON può anche essere scritto tutto in una riga.

{ "first_name" : "Noviello", "last_name": "Shark",  "online" : true, }

Ciò sarebbe più comune in un altro tipo di file o quando si incontra una stringa JSON.

Scrivere il formato JSON su più righe spesso lo rende molto più leggibile, specialmente quando si ha a che fare con un set di dati di grandi dimensioni. Poiché JSON ignora gli spazi bianchi tra i suoi elementi, è possibile distanziare i due punti e le coppie key-value al fine di rendere i dati ancora più leggibili dall'uomo:

{
  "first_name"  :  "Noviello",
  "last_name"   :  "Shark",
  "online"      :  true
}

È importante tenere presente che sebbene abbiano un aspetto simile, un oggetto JSON non ha lo stesso formato di un oggetto JavaScript , quindi, sebbene sia possibile utilizzare le funzioni all'interno degli oggetti JavaScript, non è possibile utilizzarle come valori in JSON. L'attributo più importante di JSON è che può essere facilmente trasferito tra i linguaggi di programmazione in un formato con cui tutte le lingue partecipanti possono lavorare. Gli oggetti JavaScript possono essere gestiti solo direttamente tramite il linguaggio di programmazione JavaScript.

Finora abbiamo esaminato il formato JSON nei suoi termini più semplici, ma JSON può diventare gerarchico e complesso, composto da oggetti e array nidificati. Andremo su JSON più complessi nella prossima sezione.

Lavorare con tipi complessi in JSON

JSON può memorizzare oggetti nidificati in formato JSON oltre ad array nidificati. Questi oggetti e array verranno passati come valori assegnati alle chiavi e in genere saranno anche composti da coppie chiave-valore.

Oggetti nidificati

Nel file users.json seguente, per ciascuno dei quattro utenti ("noviello", "jesse", "drew", "jamie") c'è un oggetto JSON nidificato passato come valore per ciascuno degli utenti, con le proprie chiavi nidificate "username" e "location"che riguardano ciascun utente. Il primo oggetto JSON nidificato è evidenziato di seguito.

{ 
  "noviello" : {
    "username"  : "NovielloShark",
    "location"  : "Indian Ocean",
    "online"    : true,
    "followers" : 987
  },
  "jesse" : {
    "username"  : "JesseOctopus",
    "location"  : "Pacific Ocean",
    "online"    : false,
    "followers" : 432
  },
  "drew" : {
    "username"  : "DrewSquid",
    "location"  : "Atlantic Ocean",
    "online"    : false,
    "followers" : 321
  },
  "jamie" : {
    "username"  : "JamieMantisShrimp",
    "location"  : "Pacific Ocean",
    "online"    : true,
    "followers" : 654
  }
}
users.json

Nell'esempio sopra, le parentesi graffe vengono utilizzate per formare un oggetto JSON nidificato con nome utente e dati di posizione associati per ciascuno dei quattro utenti. Proprio come qualsiasi altro valore, quando si utilizzano oggetti, le virgole vengono utilizzate per separare gli elementi.

Array nidificati

I dati possono anche essere nidificati nel formato JSON utilizzando array JavaScript che vengono passati come valore. JavaScript utilizza parentesi quadre [ ] su entrambe le estremità del suo tipo di array. Gli array sono raccolti, ordinati  e possono contenere valori di tipi di dati diversi.

Possiamo usare un array quando abbiamo a che fare con molti dati che possono essere facilmente raggruppati insieme, come quando ci sono vari siti Web e profili di social media associati a un singolo utente.

Con il primo array nidificato evidenziato, un profilo utente per Noviello potrebbe essere simile al seguente:

{ 
  "first_name" : "Noviello",
  "last_name" : "Shark",
  "location" : "Ocean",
  "websites" : [ 
    {
      "description" : "work",
      "URL" : "https://noviello.it/"
    },
    {
      "desciption" : "tutorials",
      "URL" : "https://noviello.it/community/tutorials"
    }
  ],
  "social_media" : [
    {
      "description" : "twitter",
      "link" : "https://twitter.com/noviello"
    },
    {
      "description" : "facebook",
      "link" : "https://www.facebook.com/Noviello"
    },
    {
      "description" : "github",
      "link" : "https://github.com/noviello"
    }
  ]
}
user_profile.json

La chiave "websites" e la chiave "social_media" utilizzano ciascuna un array per nidificare le informazioni appartenenti ai 2 collegamenti del sito Web di Noviello e 3 collegamenti al profilo dei social media. Sappiamo che quelli sono array a causa dell'uso di parentesi quadre.

L'uso della nidificazione nel nostro formato JSON ci consente di lavorare con dati più complicati e gerarchici.

Confronto con XML

XML , o X tensible M arkup L anguage , è un modo per archiviare dati accessibili che possono essere letti sia dall'uomo che dalle macchine. Il formato XML è disponibile per l'uso in molti linguaggi di programmazione.

In molti modi, XML è molto simile a JSON, ma richiede molto più testo, quindi è più lungo e richiede più tempo per leggere e scrivere. XML deve essere analizzato con un parser XML, ma JSON può essere analizzato con una funzione standard. Inoltre, diversamente da JSON, XML non può usare gli array.

Vedremo un esempio del formato XML e poi esamineremo gli stessi dati resi in JSON.

<users>
    <user>
        <username>NovielloShark</username> <location>Indian Ocean</location>
    </user>
    <user>
        <username>JesseOctopus</username> <location>Pacific Ocean</location>
    </user>
    <user>
        <username>DrewSquir</username> <location>Atlantic Ocean</location>
    </user>
    <user>
        <username>JamieMantisShrimp</username> <location>Pacific Ocean</location>
    </user>
</users>
users.xml
{"users": [
  {"username" : "NovielloShark", "location" : "Indian Ocean"},
  {"username" : "JesseOctopus", "location" : "Pacific Ocean"},
  {"username" : "DrewSquid", "location" : "Atlantic Ocean"},
  {"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
] }
users.json

Vediamo che JSON è molto più compatto e non richiede tag di fine mentre XML lo richiede. Inoltre, XML non utilizza un array come fa questo esempio di JSON.

Se hai familiarità con l'HTML, noterai che l'XML sembra abbastanza simile nell'uso dei tag. Mentre JSON è più snello e meno dettagliato di XML e rapido da usare in molte situazioni, comprese le applicazioni AJAX, ti consigliamo di capire il tipo di progetto su cui stai lavorando prima di decidere quali strutture di dati utilizzare.

Risorse

JSON è un formato naturale da utilizzare in JavaScript e ha molte implementazioni disponibili per l'uso in molti linguaggi di programmazione popolari. Puoi vedere il supporto linguistico completo sul sito "Presentazione di JSON" e la libreria jQuery può anche occuparsi della compatibilità e dell'analisi.

Il più delle volte, non scriverai JSON puro, ma lo tirerai da origini dati o convertirai altri file di dati in JSON. Puoi convertire dati CSV o delimitati da tabulazioni che potresti trovare nei programmi di fogli di calcolo in JSON. Puoi convertire XML in JSON e viceversa. Quando si utilizzano strumenti automatizzati, è necessario verificare i risultati e rimuovere la ridondanza, se necessario.

Quando si traducono altri tipi di dati in JSON o si crea il proprio, è possibile convalidare JSON con JSONLint e testare il proprio JSON in un contesto di sviluppo Web con JSFiddle .

Conclusione

JSON è un formato leggero che ti consente di condividere, archiviare e lavorare facilmente con i dati. Come formato, JSON ha riscontrato un maggiore supporto nelle API.