JSON – JavaScript Object Notation
Sistemi Informativi Aziendali – A.A. 2012/2013
Sommario
A.A. 2012/2013 Sistemi Informativi Aziendali 2
1. Obiettivo
2. La rappresentazione JSON
3. Librerie Java per JSON
4. Utilizzo di JSON in JavaScript
Obiettivo
JSON – JavaScript Object Notation
Obiettivo
A.A. 2012/2013 Sistemi Informativi Aziendali 4
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
Tecniche possibili
A.A. 2012/2013 Sistemi Informativi Aziendali 5
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
La rappresentazione JSON
JSON – JavaScript Object Notation
Principi
A.A. 2012/2013 Sistemi Informativi Aziendali 7
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
Struttura base
A.A. 2012/2013 Sistemi Informativi Aziendali 8
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
Object
A.A. 2012/2013 Sistemi Informativi Aziendali 9
Array
A.A. 2012/2013 Sistemi Informativi Aziendali 10
Values
A.A. 2012/2013 Sistemi Informativi Aziendali 11
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.
Strings
A.A. 2012/2013 Sistemi Informativi Aziendali 12
Numbers
A.A. 2012/2013 Sistemi Informativi Aziendali 13
Note (1)
A.A. 2012/2013 Sistemi Informativi Aziendali 14
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
Note (2)
A.A. 2012/2013 Sistemi Informativi Aziendali 15
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
Esempi
A.A. 2012/2013 Sistemi Informativi Aziendali 16
{ "employees": [ { "firstName":"John" , "lastName":"Doe, "age": 18 }, { "firstName":"Anna" , "lastName":"Smith" , "age": 30}, { "firstName":"Peter" , "lastName":"Jones" , "age": 41} ] }
Librerie Java per JSON
JSON – JavaScript Object Notation
Numerosissime librerie
A.A. 2012/2013 Sistemi Informativi Aziendali 18
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
Esempio: json-simple
A.A. 2012/2013 Sistemi Informativi Aziendali 19
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
Encoding with json-simple
A.A. 2012/2013 Sistemi Informativi Aziendali 20
Result:
{"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo"}
Esempio: Google Gson
A.A. 2012/2013 Sistemi Informativi Aziendali 21
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.””
Esempio: Jettison
A.A. 2012/2013 Sistemi Informativi Aziendali 22
http://jettison.codehaus.org/
Licenza d’uso
A.A. 2012/2013 Sistemi Informativi Aziendali 23
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/