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

Post on 29-Jun-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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/

top related