Sei sulla pagina 1di 23

JSON – JavaScript Object Notation

Sistemi Informativi Aziendali – A.A. 2012/2013


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

15 Sistemi Informativi Aziendali A.A. 2012/2013


Esempi
{
"employees": [
{ "firstName":"John" , "lastName":"Doe, "age": 18 },
{ "firstName":"Anna" , "lastName":"Smith" , "age": 30},
{ "firstName":"Peter" , "lastName":"Jones" , "age": 41}
]
}

16 Sistemi Informativi Aziendali A.A. 2012/2013


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 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

19 Sistemi Informativi Aziendali A.A. 2012/2013


Encoding with json-simple

 Result:
 {"balance":1000.21,"num":100,"nickname":nu
ll,"is_vip":true,"name":"foo"}

20 Sistemi Informativi Aziendali A.A. 2012/2013


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