Sommario 1. Obiettivo 2. La rappresentazione JSON 3. Librerie Java per JSON 4. Utilizzo di JSON in JavaScript
2 Sistemi Informativi Aziendali A.A. 2012/2013
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 Sistemi Informativi Aziendali A.A. 2012/2013
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 Sistemi Informativi Aziendali A.A. 2012/2013
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 Sistemi Informativi Aziendali A.A. 2012/2013 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 Sistemi Informativi Aziendali A.A. 2012/2013
Object
9 Sistemi Informativi Aziendali A.A. 2012/2013
Array
10 Sistemi Informativi Aziendali A.A. 2012/2013
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 Sistemi Informativi Aziendali A.A. 2012/2013
Strings
12 Sistemi Informativi Aziendali A.A. 2012/2013
Numbers
13 Sistemi Informativi Aziendali A.A. 2012/2013
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 Sistemi Informativi Aziendali A.A. 2012/2013
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
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 Sistemi Informativi Aziendali A.A. 2012/2013
Esempio: json-simple http://code.google.com/p/json- simple/ Really simple, just use json- simple-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
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 pre- existing objects that you do not have source-code of.””
21 Sistemi Informativi Aziendali A.A. 2012/2013
Esempio: Jettison http://jettison.codehaus.org/
22 Sistemi Informativi Aziendali A.A. 2012/2013
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 Sistemi Informativi Aziendali A.A. 2012/2013