JSON JavaScript Object Notation
Sommario 1. Obiettivo 2. La rappresentazione JSON 3. Librerie Java per JSON 4. Utilizzo di JSON in JavaScript 2
Obiettivo JSON JavaScript Object Notation
Obiettivo Nell integrazione di sistemi informativi, spesso i dati trasferiti sono strutturati (oggetti, strutture, liste, array,...) Come codificare, tali dati in formato testuale? Oggetti complessi Indipendente dal linguaggio di programmazione Semplice e rapido da generare e da acquisire Adatto sia server-side che client-side 4
Tecniche possibili SOAP (+XML+XMLSchema+WSDL) Perfetto, ma si è dimostrato in molti casi troppo pesante e macchinoso XML + XMLSchema Molto diffuso, spesso manca lo Schema (laziness), poco robusto per evoluzioni dello schema (deve essere condiviso a priori) Text (ad-hoc encoding) Ultima risorsa. Richiede di inventare meccanismi di codifica, delimitazione, strutturazione,... Per dati semplici basta split&merge JSON Nato nell integrazione client-side, ora sempre più diffuso 5
La rappresentazione JSON JSON JavaScript Object Notation
Principi Tratto dal linguaggio JavaScript: Possiede una sintassi per inizializzare oggetti complessi Può generare oggetti dinamicamente Non esiste il concetto di «Classe» Nuove property possono essere aggiunte dinamicamente Sostanziale equivalenza tra liste, array, mappe, strutture Conversioni automatiche di tipo JSON: utilizzare la sintassi per l inizializzazione, già esistente in JavaScript, per codificare oggetti http://www.json.org RFC4627: http://www.ietf.org/rfc/rfc4627.txt?number=4627 Media Type: application/json 7
Struttura base JSON is built on two structures: Object : A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array. Array : An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence....e basta! Tutto viene ricondotto a queste due primitive di strutturazione 8
Object 9
Array 10
Values A value can be a string in double quotes, or a number, or true or false or null, or an object or an array. These structures can be nested. 11
Strings 12
Numbers 13
Note (1) Esiste un solo tipo Number, senza distinzione tra interi, float,... Stringhe Unicode (come in Java), con pochi caratteri di escape Non esiste sintassi per tipi più complessi (date, time, currency,...) Codificati come stringhe Codificati come property di oggetti Gli array possono anche contenere oggetti di tipo diverso tra loro 14
Note (2) Gli oggetti non hanno un tipo né una classe semplicemente sono identificati dalle proprietà che contengono (duck-typing). Le proprietà, a loro volta, possono essere altri oggetti o array non è necessario dichiararlo o tipizzarle 15
Esempi { "employees": [ { "firstname":"john", "lastname":"doe, "age": 18 }, { "firstname":"anna", "lastname":"smith", "age": 30}, { "firstname":"peter", "lastname":"jones", "age": 41} ] } 16
Librerie Java per JSON JSON JavaScript Object Notation
Numerosissime librerie Molti framework supportano JSON Mettono a disposizione, anche in forma separata, le relative librerie Operazioni chiave: Da oggetto (Java) a rappresentazione JSON Automatico vs Selettivo Da rappresentazione JSON ad oggetti Java Tradotto in Map/List Mappato su una classe compatibile Da rappresentazione JSON a oggetto interrogabile 18
Esempio: json-simple http://code.google.com/p/jsonsimple/ Really simple, just use jsonsimple-1.1.1.jar Metodo.put() per creare oggetti JSON Metodo.get() per interrogare le proprietà degli oggetti Metodo.parse() per leggere un JSON presente in una stringa 19
Encoding with json-simple Result: {"balance":1000.21,"num":100,"nickname":nu ll,"is_vip":true,"name":"foo"} 20
Esempio: Google Gson http://code.google.com/p/google-gson/ Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with arbitrary Java objects including preexisting objects that you do not have source-code of. 21
Esempio: Jettison http://jettison.codehaus.org/ 22
Licenza d uso Queste diapositive sono distribuite con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 2.5 Italia (CC BY-NC-SA 2.5) Sei libero: di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera di modificare quest'opera Alle seguenti condizioni: Attribuzione Devi attribuire la paternità dell'opera agli autori originali e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera. Non commerciale Non puoi usare quest'opera per fini commerciali. Condividi allo stesso modo Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa. http://creativecommons.org/licenses/by-nc-sa/2.5/it/ 23