Liigu peamise sisu juurde

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 andmedEi ole toetatudToetatud
Valikulised väljadEbamugav (tühjad veerud)Loomulik (null või puuduv võti)
Loendid kirje seesNõuab eraldi kodeerimistMassiivid
TöötlemineKohandatud, veaohtlikTeekide poolt hallatud
Faili suurusVäiksemSuurem (võtmenimed korduvad)
InimloetavusJahJah

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.