JSON handling with JS
Istorija
**JSON** ja nastao iz potrebe da se real-time komunikacija između brauzera i klijenta odvija bez korišćenja plugin-ova kao što su Flash ili Java apleti koji su se koristili u ranim 2000-im. Daglas Krokford je prvi precizirao i popularizovao JSON format. JSON.org web sajt je osnovan 2002. godine, a 2005. Yahoo je počeo da nudi neke svoje servise u JSON formatu. Google je 2006. počeo da nudi JSON feed za svoj GData protokol.
** JavaScript Object Notation** predstavlja sintaksu za čuvanje i razmenu podataka. Ova notacija ima jako jednostavnu strukturu gde se podaci predstavljaju po principu ključ: vrednost. JSON je nastao kao alternativa XML standarda za razmenu podataka. Danas se dosta više koristi JSON u odnosu na XML zato što je jednostavniji i lakši za korišćenje. U nastavku teksta biće dat primer nekog jednostavnog JSON fajla i biće dat primer istih podataka predstavljenih u XML-u, pa je na taj način najlakše sagledati razliku između ova dva formata.
JSON može raditi sa različitim tipovima podataka. Neki od podržanih tipova podataka su: boolean, number, string, object, array, null.
Najjednostavniji primer JSON fajla može izgledati ovako: { "ime":"Milan", "prezime":"Kalinić" } Oznaka koja se koristi za definisanje niza vrednosti u JSON fajlu su uglaste zagrade([]). Primer nekog jednostavnog niza JSON vrednosti nalazi se ispod: "zaposleni":[ {"ime":"Ivan","prezime":"Zeljković"}, {"ime":"Katarina","prezime":"Šišmanović"}, {"ime":"Sanja","prezime":"Marinković"} ]
Sličnost izmedju XML-a i JSON-a je u tome što su oba ova standarda samoopisjuća. I jedan i drugi standard predstavljaju hijerhijske strukture, vrednosti se mogu ugnježdavati unutar drugih vrednosti. I XML i JSON se mogu parsirati od strane većine prograsmkih jezika, a takodje i jednom i drugom se može pristupiti preko XMLHttpRequesta.
Ipak, postoje i značajne razlike između ova dva standarda za razmenu podataka. JSON zapis je kraći, a istovremeno i brži za čitanje i pisanje. JSON ne koristi kao oznaku krajnji(zatvarajući tag). Za razliku od XML-a JSON može da koristi nizove. Ipak ono što se često navodi kao najveća razlika je da za XML da bi se parsirao mora postojati XML parser, a kod JSON-a je to obična JavaScript funkcija.
Sama JSON sintaksa predstavlja podskup od JavaScript sintakse. JSON sintaksa je izvedena iz JavaScript notacije za kreiranje objekate. Zbog toga je jako jednostavno raditi sa JSON-om u okviru JavaScript-a. Na slici ispod je primer kreiranja varijable koja prima neki niz vrednosti kao ilustracije veze izmedju JSON-a i JavaScripta.
Elementima ovog niza može se pristupiti na više načina.

Ovakav pristup će nam vratiti prvi element niza. Isti efekat će biti ako napišemo sledeći kod:
Naravno, na isti način se mogu menjati vrednosti nekim elementima niza.
Primer ispod ilustruje neke od razlika koje su navedene kao najbitnije između JSON i XML formata. Vidi se da je JSON format lakši za čitanje i razumevanje.
Zašto koristiti JSON? – Za aplikacije koje koriste AJAX, JSON je dosta lakši i brži. Najčešća primena je kod aplikacija koje čitaju neke podatke sa web servera i prikazuju te podatke na web stranici.
AJAJ(Asynchronous JavaScript and JSON) je ista metodologija kao Ajax samo što se umesto XML-a, koristi JSON kao format podataka. AJAJ je web development tehnika koja omogućava da web stranica zahteva nove podatke od servera nakon što je učitana putem brauzera. Na primer kada korisnik nešto kuca kao kriterijum pretrage, klijentski kod aplikacije to šalje serveru asinhrono koji na to odgovora odmah sa nekim predlozima pretrage. Na slici ispod je ilustrovan ovaj koncept tako što je prikazan kod klijentske aplikacije koja koristi XMLHttpRequest da bi pokupila podatke sa servera u JSON formatu.
Obrada JSON-a u JavaScript-u Da bismo dobili JSON objekat iz stringa, možemo koristiti JSON.parse() metodu. Sintaksa metode: JSON.parse(text[, reviver]) Text– obavezni parametar, predstavlja JSON u tekstualnom formatu. Reviver– opcioni parametar, predstavlja funkciju koja može transformisati vrednost parametara pre nego što se dobije JSON objekat kao povratna vrednost metode JSON.parse(). Povratna vrednost metode je JSON objekat. U slučaju da se ne može generisati JSON objekat od teksta koji je prosleđen metodi, baciće se SyntaxError izuzetak koji označava da uneti string nije validan JSON. Da bismo dobili string od JSON objekta, možemo koristiti JSON.stringify() metodu. Sintaksa metode: JSON.stringify(value[, replacer[, space]]) Value – obavezni parametar, predstavlja JSON objekat koji želimo da konvertujemo u string. replacer – opcioni parametar, može biti funkcija ili niz. Kao funkcija prima dva parametra, ključ i vrednost parametra. Povratna vrednost je vrednost parametra koju želimo uključiti u rezultat. Primer:
Promenljiva stringJson će imati vrednost:
Svi parovi ključ-vrednost čija vrednost je string su isključeni iz rezultata. Ukoliko replacerprosledimo kao niz čije su vrednosti nazivi ključeva, to znači da će se samo ti kluč-vrednost parovi javiti u rezultatu.
Sada, promenljiva stringJson će imati vrednost:
Space – opcioni parametar, predstavlja nivo indentacije pri štampanju rezultata. Može imati vrednost do broj 10, što predstavlja indentaciju od 10 karaktera (praznih mesta). Za simulaciju prettyPrint-a (lepog i čitljivog ispisa JSON-a), može se proslediti ‘\t’. JSON Schema JSON Schema predstavljaspecifikaciju JSON formata. Koristi se za:
- Opisivanje tipa podataka
- Jasnu i čitljivu dokumentaciju za ljude, kao i za mašine
- Kompletna strukturna validacija, pogodna za validiranje podataka koji se nalaze u datom JSON-u Primer JSON Schema-e:
Na sajtu http://json-schema.org/mogu se naćisveključnerečikoje se mogukoristitiprikreiranjujedne JSON Schema-e. Uzpomoć ove šeme bi mogao da se validira sledeći JSON dokument:
Ukoliko bi brojGodina imao negativnu vrednost, navedeni JSON dokument ne bi prošao validaciju. Postoje razne biblioteke koje se mogu koristiti za validaciju i pomoći da aplikacija koju pravite bude bolja. Primer poziva validacije nekog JSON dokumenta po nekoj JSON Schema-i:
Na ovaj način bi smo prošli kroz JSON dokument koji sadrži podatke o našim korisnicima, i proverili da li su svi podaci o našim korisnicima validni.