Sei sulla pagina 1di 19

Sommario

1. Obiettivo
2. La rappresentazione JSON
3. Librerie Java per JSON
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
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
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
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
Object
Array
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.
Strings
Numbers
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
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
Esempi
{
"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
 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
 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

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

Potrebbero piacerti anche