JavaScript Object Notation
| JSON | |
|---|---|
| Estensione | .json |
| Tipo MIME | application/json |
| Tipo | Scambio dati |
| Estensione di | JavaScript |
| Standard | RFC 4627 |
| Sito web | json.org |
In informatica, nell'ambito della programmazione web, JSON, acronimo di JavaScript Object Notation, è un formato adatto all'interscambio di dati fra applicazioni client-server.[1]
È basato sul linguaggio JavaScript Standard ECMA-262 3ª edizione dicembre 1999, ma ne è indipendente. Viene usato in AJAX come alternativa a XML/XSLT.[2]
Indice
Descrizione[modifica | modifica wikitesto]
La semplicità di JSON ne ha decretato un rapido utilizzo specialmente nella programmazione in AJAX. Il suo uso tramite JavaScript è particolarmente semplice, infatti l'interprete è in grado di eseguirne il parsing tramite una semplice chiamata alla funzione eval(). Questo fatto lo ha reso velocemente molto popolare a causa della diffusione della programmazione in JavaScript nel mondo del Web.
I tipi di dati supportati da questo formato sono:
- booleani (
trueefalse); - interi, reali, virgola mobile;
- stringhe racchiuse da doppi apici (
"); - array (sequenze ordinate di valori, separati da virgole e racchiusi in parentesi quadre
[]); - array associativi (sequenze coppie chiave-valore separate da virgole racchiuse in parentesi graffe);
null.
La maggior parte dei linguaggi di programmazione possiede un typesystem molto simile a quello definito da JSON per cui sono nati molti progetti che permettono l'utilizzo di JSON con altri linguaggi quali, per esempio: ActionScript, C, C#, Adobe ColdFusion, Common LISP, Delphi, E, Erlang, Java, JavaScript, Lua, ML, Objective Caml, Perl, PHP, Python, REBOL, Ruby e Rust.
Fra i primi utilizzatori di JSON si trova Yahoo!, dal 2005.[3]
Usare JSON[modifica | modifica wikitesto]
Di solito uno stream JSON è restituito in una risposta HTTP che per correttezza dovrebbe avere un'intestazione Content-Type: application/json (o simile) ((TODO reference))
In JavaScript[modifica | modifica wikitesto]
È possibile effettuare la richiesta HTTP tramite codice JavaScript grazie all'oggetto XMLHttpRequest (di solito oggi non si utilizza direttamente questo oggetto, ma librerie strutturate che lo usano a tale scopo come ad esempio JQuery, AngularJS, ReactOS - TODO reference)).
Una volta ricevuta la risposta HTTP è molto semplice analizzare lo stream JSON in risposta, come dimostra il seguente codice:
var the_object; // definisce una variabile
var http_request = new XMLHttpRequest(); //istanzia l'oggetto da utilizzare per la richiesta AJAX
http_request.open("GET", url, true); // imposta l'oggetto per fare una richiesta GET HTTP
// viene definita la funzione che verrà eseguita al cambiamento di stato dell'oggetto XMLHttpRequest()
http_request.onreadystatechange = function () {
// se la risposta è pronta per essere analizzata (in gergo: parsata)
if (http_request.readyState == 4) {
// e se il codice di stato della risposta è 200 (OK - successo)
if (http_request.status == 200) {
// valuta (parsa) il testo di risposta nel body trasformandolo in JSON
the_object = JSON.parse(http_request.responseText);
} else {
// altrimenti segnala un errore
alert("Errore con l'URL.");
}
}
};
// effettua la GET HTTP tramite AJAX (senza cambiare pagina nel browser)
// e senza inviare nulla nel body della richiesta (parametro "null");
http_request.send(null);
Approfondimenti sull'uso di JSON in JavaScript[modifica | modifica wikitesto]
Il codice precedente è valido solo per i browser con supporto nativo a JSON (tra questi ad esempio sono escluse le versioni di Internet Explorer inferiori alla 8), in tal caso la sintassi da usare è:
the_object = eval("(" + http_request.responseText + ")");
È da notare il fatto che l'uso di XMLHttpRequest in questo esempio non è compatibile con tutti i browser. Infatti ci sono piccole differenze sintattiche tra Internet Explorer, Opera, Safari e Mozilla Firefox.
Ci sono altri modi per ottenere stream JSON, per esempio l'uso dell'elemento <iframe> o di form come <form action="url_to_cgi_script" target="name_of_hidden_iframe">. Questi approcci erano largamente usati prima dell'ampio supporto dell'oggetto XMLHTTPRequest.
Anche il tag <script> può essere usato per ottenere dati JSON. Questo permette di superare alcune limitazioni che sorgono con l'utilizzo di XMLHTTPRequest ma a discapito della sicurezza. Su JSONRequest si può trovare un'interessante e più sicura alternativa.
Un esempio di JSON[modifica | modifica wikitesto]
Il seguente esempio è un semplice menù.
{
"type": "menu",
"value": "File",
"items": [
{"value": "New", "action": "CreateNewDoc"},
{"value": "Open", "action": "OpenDoc"},
{"value": "Close", "action": "CloseDoc"}
]
}
Confronto con XML e altri linguaggi di markup[modifica | modifica wikitesto]
XML è un linguaggio di markup mentre JSON non lo è: JSON è un formato di interscambio di dati. Entrambi non hanno un sistema di rappresentazione dei dati binari, per cui è compito del programmatore adottare delle convenzioni appropriate (es. Base64) per convertire i dati binari in forma testuale.
Alcune delle limitazioni di JSON sono coperte da YAML. Nonostante una maggiore complessità, from __future__ import * YAML è considerato leggero rispetto a XML.
Altri semplici linguaggi di markup[modifica | modifica wikitesto]
Note[modifica | modifica wikitesto]
- ^ (EN) Introducing JSON, su JSON. URL consultato il 16 aprile 2015.
- «JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.».
- ^ (EN) Final draft Standard ECMA-262 edition 5.1, March 2011 (Rev. 6) - Ecma 262 (PDF), su ECMA International, marzo 2011. URL consultato il 16 aprile 2015.
- ^ (EN) JSON JavaScript Object Notation, su Yahoo!, 19 luglio 2005. URL consultato il 16 aprile 2015.
Voci correlate[modifica | modifica wikitesto]
Altri progetti[modifica | modifica wikitesto]
Wikimedia Commons contiene immagini o altri file su JSON
Collegamenti esterni[modifica | modifica wikitesto]
- Sito ufficiale (in inglese)
- Sito ufficiale (traduzione italiana)
- Sito italiano di approfondimenti su Json, json.it.
- JSON Formatter e Validator (in inglese)
- JSON Formatter (in inglese)
- JSON EDITOR
- JSON Formatter (in inglese)
| Controllo di autorità | LCCN: (EN) sh2014000515 · GND: (DE) 1105592812 |
|---|