![Page 1: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/1.jpg)
JSON – JavaScript Object Notation
Sistemi Informativi Aziendali – A.A. 2012/2013
![Page 2: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/2.jpg)
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
![Page 3: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/3.jpg)
Obiettivo
JSON – JavaScript Object Notation
![Page 4: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/4.jpg)
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
![Page 5: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/5.jpg)
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
![Page 6: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/6.jpg)
La rappresentazione JSON
JSON – JavaScript Object Notation
![Page 7: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/7.jpg)
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
![Page 8: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/8.jpg)
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
![Page 9: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/9.jpg)
Object
A.A. 2012/2013 Sistemi Informativi Aziendali 9
![Page 10: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/10.jpg)
Array
A.A. 2012/2013 Sistemi Informativi Aziendali 10
![Page 11: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/11.jpg)
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.
![Page 12: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/12.jpg)
Strings
A.A. 2012/2013 Sistemi Informativi Aziendali 12
![Page 13: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/13.jpg)
Numbers
A.A. 2012/2013 Sistemi Informativi Aziendali 13
![Page 14: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/14.jpg)
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
![Page 15: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/15.jpg)
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
![Page 16: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/16.jpg)
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} ] }
![Page 17: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/17.jpg)
Librerie Java per JSON
JSON – JavaScript Object Notation
![Page 18: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/18.jpg)
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
![Page 19: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/19.jpg)
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
![Page 20: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/20.jpg)
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"}
![Page 21: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/21.jpg)
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.””
![Page 22: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/22.jpg)
Esempio: Jettison
A.A. 2012/2013 Sistemi Informativi Aziendali 22
http://jettison.codehaus.org/
![Page 23: JSON JavaScript Object Notationelite.polito.it/files/courses/02CIX/2013/03-JSON.pdfStruttura base 8 Sistemi Informativi Aziendali A.A. 2012/2013 JSON is built on two structures: “Object”:](https://reader034.vdocuments.mx/reader034/viewer/2022042402/5f145bc43ca421001324a2ea/html5/thumbnails/23.jpg)
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/