json javascript object notationelite.polito.it/files/courses/02cix/2013/03-json.pdfstruttura base 8...

23
JSON – JavaScript Object Notation Sistemi Informativi Aziendali – A.A. 2012/2013

Upload: others

Post on 29-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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/