JSON, come crearlo

Post apparentemente semplice, ma vale la pena spendere qualche riga su come progettare e realizzare un file JSON che può essere esposto da uno script PHP e interpretato da un codice JavaScript.

Cos’è JSON?

E’ un sistema leggero di scambio dati tra servizi e software eterogenei. La sua sintassi è molto simile a quella di JabvaScript poiché, non a caso, è il linguaggio con cui è più facile intuire si gestiscano i file JSON pubblicati ed esposti da altri servizi di backend magari con pagine PHP o Java o Python. L’acronimo sta per Javascript Object Notation. E’ il sostituto ideale di XML, quest’ultimo spesso relegato ai servizi SOAP più complessi, mentre JSON è leggero, intuitivo e decisamente più semplice da utilizzare. E’ formalmente indipendente dal linguaggio di programmazione che lo tratta. I dati sono autodescritti con i nomi dei campi.

Perché JSON

La domanda è lecita per lo studente alle prime armi. Sui banchi di scuola la prima cosa che si impara è interrogare il database con una quesry ed ad usare un linguaggio stile PHP a mostrare attraverso tabelle o simili i dati appena raccolti dalla interrogazione. Il codice PHP è ovviamente chiuso e i dati sono formattati con abbellimenti e stili grafici integrati nella pagina risultante. Questo è ottimo ma se quella query la volessi riutilizzare non solo con una pagina PHP ma anche da una app che grafica quelle informazioni con un codice o linguaggio completamente diverso? Perché allora non cercare un formato dati semplice che contenga la descrizione del dato e il dato stesso così che, se reso pubblico, tutti i vari back-end possano raggiungerlo? Le info JSON esposte possono pi essere consumate da uno script PHP, da una pagina HTML con Javascript o qualsiasi altro linguaggio di programmazione.

Tipi consentiti

Che dati possiamo catalogare?

  • Numeri interi o decimali (con il punto tipo 1.23)
  • Testo (tra virgolette doppie)
  • Booleano (true o false)
  • Un vettore semplice o associativo (con le parentesi quadre)
  • Un oggetto ulteriore purché racchiuso da altre parentesi graffe
  • Il valore null

Sintassi

La creazione di un file JSON non è difficile. Occorre una pianificazione di cosa mostrare in base alla base di dati o sistema aggregato di dati da cui provengono le informazioni. Le regole e la sintassi da seguire sono poche.

  • Ogni dato è una coppia nome descrittivo del dato/valore del dato
  • I dati sono separati da virgole
  • Le parentesi graffe raggruppano oggetti, ovvero gruppi di dati
  • Le parentesi quadre inglobano vettori di dati

Vediamo un primo esempio che racchiude le regolette appena descritte:

{
  "nome": "Alfredo",
  "cognome": "Centinaro",
  "indirizzo": "via villa mosca 47b",
  "datanascita": {
              "giorno": 2,
              "mese": 1,
              "anno": 1982
            },
  "sesso": "M", 
  "celibe": false,
  "altezza": 1.73,
  "colori": ["verde", "rosso", "arancio"],
  "titolodistudio": null
}

Se vogliamo catalogare più di un dato? Ci sono due modi. Il primo è in JSON puro, indipendente dalla struttura dati. Partiamo dal presupposto che il file deve mantenere la graffa di inizio e fine, l’idea è di dare una chiave ad ogni elemento nella forma:

{
    "chiave1": { ... },
    "chiave2": { ... },
    "chiave3": { ... }
}

U esempio completo di questo approccio:

{
"1":{
  "nome": "Alfredo",
  "cognome": "Centinaro",
  "indirizzo": "via villa mosca 47b",
  "datanascita": {
              "giorno": 2,
              "mese": 1,
              "anno": 1982
            },
  "sesso": "M", 
  "celibe": false,
  "altezza": 1.73,
  "colori": ["verde", "rosso", "arancio"],
  "titolodistudio": null
},
"2":{
  "nome": "Mario",
  "cognome": "Rossi",
  "indirizzo": "via villa mosca 47b",
  "datanascita": {
              "giorno": 2,
              "mese": 1,
              "anno": 1982
            },
  "sesso": "M", 
  "celibe": false,
  "altezza": 1.73,
  "colori": ["verde", "rosso", "arancio"],
  "titolodistudio": null
}
}

Il secondo è quello di gestire il record multiplo come un vettore dichiarando un vettore e dentro le graffe i relativi oggetti. Questo secondo approccio è più utilizzato, perché non presuppone una chiave per ogni record.

{
"insegnanti":[  
    { ... },  
    { ... },  
    { ... }  
]
}  

Un esempio completo di quest’ultima versione potrebbe quindi essere il seguente:

{
"insegnanti":[
  {
  "nome": "Alfredo",
  "cognome": "Centinaro",
  "indirizzo": "via villa mosca 47b",
  "datanascita": {
              "giorno": 2,
              "mese": 1,
              "anno": 1982
            },
  "sesso": "M", 
  "celibe": false,
  "altezza": 1.73,
  "colori": ["verde", "rosso", "arancio"],
  "titolodistudio": null
},
{
  "nome": "Mario",
  "cognome": "Rossi",
  "indirizzo": "via villa piave 37b",
  "datanascita": {
              "giorno": 2,
              "mese": 5,
              "anno": 1980
            },
  "sesso": "M", 
  "celibe": true,
  "altezza": 1.75,
  "colori": ["blu", "rosso", "nero"],
  "titolodistudio": null
}]
}

Parser online

Ce ne sono diversi, uno dei più semplici https://jsoneditoronline.org/ o https://jsonformatter.org/json-parser che crea una finestra doppia affiancata in cui potete vedere codice JSON e albero risultante con tanto di debugger. Se salvate i dati su file con estensione .json, potete addirittura aprirli con un browser che ne evidenzierà in molti casi la sintassi.

Ultima modifica 23 Dicembre 2022