JSON
Sissejuhatus
Andmete salvestamisel ja pikemas perspektiivis andmevahetusel süsteemide vahel peab kehtima mingi kokkulepe selle kohta, millises formaadis antud fail on. Lihttekstifailid sobivad lihtsate struktuuride jaoks, kuid keerukamate juhtumite korral - nt. pesastatud andmed, valikulised väljad, objektide loendid - kõik need nõuaksid eraldi töötlemisloogikat.
JSON (JavaScript Object Notation) on laialt levinud tekstipõhine formaat struktureeritud andmete esitamiseks. See on inimesele loetav, kergesti töödeldav formaat, mis on toetatud praktiliselt kõikides programmeerimiskeeltes ka platvormides.
Hoolimata nimest ei ole JSON-il Java-ga otsest seost. See sai alguse JavaScriptist, kuid on nüüd keelest sõltumatu ja laialdaselt kasutusel REST API-des, konfiguratsioonifailides, NoSQL-andmebaasides ning teenustevahelises suhtluses.
JSON-i süntaks
JSON-dokument koosneb väikesest hulgast põhielementidest.
Primitiivsed väärtused
"Library Manager" // string — always double-quoted
42 // number (integer)
19.99 // number (decimal)
true // boolean
false // boolean
null // absence of a value
Objektid
JSON-objekt on järjestamata võtme-väärtuse paaride kogum, mis on ümbritsetud looksulgudega. Võtmed peavad olema sõned:
{
"isbn": "978-0-13-468599-1",
"title": "The Pragmatic Programmer",
"author": "Hunt & Thomas",
"price": 45.0,
"inStock": true
}
Massiivid
JSON-massiiv on järjestatud väärtuste loend, mis on ümbritsetud nurksulgudega. Väärtused võivad olla mis tahes tüüpi ega pea olema sama tüüpi:
["fiction", "non-fiction", "reference"]
Pesastamine
Objekte ja massiive saab pesastada üksteise sisse suvalise sügavuseni:
{
"isbn": "978-0-13-468599-1",
"title": "The Pragmatic Programmer",
"authors": [
{ "name": "Andrew Hunt", "country": "USA" },
{ "name": "David Thomas", "country": "UK" }
],
"categories": ["software", "engineering"],
"publisher": {
"name": "Addison-Wesley",
"founded": 1942
}
}
JSON-fail, mis sisaldab mitut raamatut, koondab need ülemise taseme massiivi:
[
{
"id": 1,
"isbn": "978-0-13-468599-1",
"title": "The Pragmatic Programmer",
"author": "Hunt & Thomas",
"price": 45.0
},
{
"id": 2,
"isbn": "978-0-20-163361-0",
"title": "Clean Code",
"author": "Robert C. Martin",
"price": 38.0
}
]
JSON vs lihttekst
Sama andmestiku lihttekstifail võiks välja näha näiteks selline:
1,978-0-13-468599-1,The Pragmatic Programmer,Hunt & Thomas,45.00
2,978-0-20-163361-0,Clean Code,Robert C. Martin,38.00
| Lihttekst (CSV-laadne) | JSON | |
|---|---|---|
| Pesastatud andmed | Ei ole toetatud | Toetatud |
| Valikulised väljad | Ebamugav (tühjad veerud) | Loomulik (null või puuduv võti) |
| Loendid kirje sees | Nõuab eraldi kodeerimist | Massiivid |
| Töötlemine | Kohandatud, veaohtlik | Teekide poolt hallatud |
| Faili suurus | Väiksem | Suurem (võtmenimed korduvad) |
| Inimloetavus | Jah | Jah |
Kindla struktuuriga andmete puhul on lihttekst lihtsam. Niipea kui andmetes tekib pesastatus — näiteks raamat mitme autoriga — käsitleb JSON seda paremini, samas kui lihttekst nõuab üha keerukamaid kodeerimisvõtteid.
JSON Javas
Java standardteek JSON-it ei toeta, kuid selle jaoks on olemas kaks laialt kasutusel olevat teeki:
- Jackson - Spring ökosüsteemi vaikevalik, hästi konfigureeritav, toetab lisaks JSON-ile ka muid andmetüüpe.
- Gson - Google poolt arendatud, lihtsa API ja kerge õpikõveraga.
Nende teekide kohta ja JSON-failide lugemise/kirjutamise kohta saate lugeda järgmisest peatükist.