Xml e JSON - rappresentazione dei dati

Linguaggi utilizzati per rappresentare i dati

Esempio

Una rubrica in formato Xml che contenga il dato del nome numero di telefono fisso, mobile ed email. Ad esempio potrebbe essere, nel caso avessimo solo due contatti:

<address_book>
    <contact id="1">
        <name>Roberto Rossi</name>
        <phome>0331 345678</phone>
        <mobile>348 978654</mobile>
        <email>roby@gmail.com</email>
    </contact>
    <contact id="2">
        <name>Vittoria Rossi</name>
        <phome>0331 345688</phone>
        <mobile>348 978664</mobile>
        <email>vicky@gmail.com</email>
    </contact>
</address_book>

Abbiamo definito un root element address_book che contiene una lista di contact ognuna dei quali ha come sottoelementi name, phone, mobile e email.

L'elemento contact ha inoltre un attributo id.

Se invece la medesima rubrica la volessimo rappresentare con un documento JSON, potrebbe essere:

[
    {
        "id": 1,
        "name": "Roberto Rossi",
        "phone": "0331 345678",
        "mobile": "348 978654",
        "email": "roby@gmail.com"
    },
    {
        "id": 2,
        "name": "Vittoria Rossi",
        "phone": "0331 345688",
        "mobile": "348 978664",
        "email": "vicky@gmail.com"
    }
]

Si può vedere come il formato JSON sia, in genere, meno prolisso del formato XML.

In notazione JSON per esprimere array/liste di elementi si utilizzano le parentesi quadre []e virgola , per separare gli elementi.

Es:

[1, 2, 3, 4]
["Sole", "Luna", "Marte"]
[{ "x": 1, "y": 3.5 }, { "x": 1.7, "y": 4.8}]

Mentre gli oggetti sono rappresentati con parentesi graffe {}come visto nell'ultimo tipo di array (array di oggetti).

Ad esempio l'oggetto che rappresenta un singolo contatto dell'address book:

{
       "id": 1,
        "name": "Roberto Rossi",
        "phone": "0331 345678",
        "mobile": "348 978654",
        "email": "roby@gmail.com"
}

Inoltre in Javascript è molto semplice convertire un oggetto Javascript in documento JSON per inviarlo lungo la rete e dall'altra parte riconvertire la stringa JSON in oggetto Javascript.

La conversione da oggetto Javascript a stringa è fatta con il metodo JSON.stringify(obj).

Ad esempio:

const c1 = {
  name: "massimo",
  phone_number: "2345678"
}

const c2 = {
  name: "giovanni",
  phone_number: "8688989"
}

const contatti = [c1, c2];

var contattiString = JSON.stringify(contatti);

console.log(contattiString);

e abbiamo come output la stringa:

[{"name":"massimo","phone_number":"2345678"},{"name":"giovanni","phone_number":"8688989"}]

Partendo invece dalla stringa, in formato JSON, possiamo riottenere l'oggetto Javascript con il metodo JSON.parse(string) che ritorna un oggetto.

Ad esempio:

const jsonMsg = '[{"name":"massimo","phone_number":"2345678"},{"name":"giovanni","phone_number":"8688989"}]';

const objContatti = JSON.parse(jsonMsg);

// ciclo sui contatti e stampo per ognuno nome e numero
objContatti.forEach( e => {
    console.log(`nome: ${e.name}, numero: ${e.phone_number}`);
});

Ho l'output:

nome: massimo, numero: 2345678
nome: giovanni, numero: 8688989

Riferimenti

Esempi di utilizzo di JSON con Javascript:

Tutorial

Extra

Last updated