JSON opšte

JSON (JavaScript Object Notation) je jedan od lakših tekstualnih otvorenih standarda dizajniran za čitljivu razmenu podataka. Ekstenzija datoteke s podacima u JSON-ovom formatu je .json, dok je meta oznaka (MIME format) application/json.

JSON je format koji polako zamenjuje XML jer ima nekolicinu prednosti u odnosu na XML. JSON ne koristi tagove pa stoga ima kraći kod koji je lakši za pisanje i razumljiviji za čitanje. Mada je najbitnija prednost JSON-a u odnosu na XML je ta što se JSON parsira kroz standardnu JavaScript funkciju dok se XML parsira kroz XML parser.

Tipovi podataka

U okviru JSON-ove strukture mogu da se koriste sledeći tipovi podataka:

  • Broj (JavaScript format u pokretnom zarezu sa dvostrukom preciznošću, zavisi od implementacije)
  • String (Unicode format, sa dvostrukim navodnicima, kao izlazna sekvenca se koristi backslash )
  • Boolean (true ili false)
  • Niz (uredjena sekvenca vrednosti, odvojena zarezima i uokvirena kockastim zagradama; vrednosti ne moraju biti istog tipa)
  • Objekat (neuredjena kolekcija ključ:vrednost parova sa ‘:’ karakterom koji razdvaja ključ i vrednost, razdvojeni zarezima i uokvireni vitičastim zagradama. Ključevi moraju biti niske i različiti od ostalih ključeva)
  • null (prazno)

Beline se mogu slobodno dodati izmedju strukturalnih karaktera (zagrada “{ } [ ]”, dve tačke “:” i zareza “,”).

JSON Struktura

Struktura može biti organizovana u vidu:

  • Zbirke parova (ime / vrednost)

    Na raznim jezicima, to je realizovano kao objekat, zapis, struktura, rečnik, heš tabela, lista sa ključevima ili asocijativni niz. Ova struktura se obeleažva sa { } vitičastim zagradama, a podaci u obliku ime/vrednost su odvojeni sa
    zarezom.

    • Ime je niska slova pod dvostrukim navodnicima.
    • Vrednost
  • Niza (uređena lista vrednosti)

    Niz se obeležava sa [ ] uglastim zagradama, a članovi niza u odvojeni zarezom.

Na sledećem primeru je JSON-ova reprezentacija objekta koji opisuje osobu. Objekat ima polja ime i prezime predstavljena pomoću string-a, broj za godinu, objekat koji prikazuje adresu te osobe i niz objekata sa brojevima telefona.

Kontrola i editovanje koda

Za kontrolu koda može da se koristi sajt http://jsonlint.com koji vrši online kontrolu koda. Takodje je dobro koristiti sajt www.jsoneditoronline.org za lakše editovanje sadržaja u JSON-ovom formatu kao i minifikaciju kod-a.

Za dobru preglednost koda preko browsera je moguće dodati add-ons i za Firefox i za Chrome pod nazivom “JSONView”. Povlačenje podataka iz WordPress-a u JSON-ovom formatu je lako koristeći plugin “JSON API” koji prilično dobro radi posao iako je stara verzija koja se ne apdejtuje.

JavaScript i JSON

Pošto je JSON-ova syntax-a derivat JavaScript objektne notacije, veoma lako raditi sa JSON-ovim podacima u JavaScriptu.

Parsiranje

Parsiranje je pravljenje JavaScript objekta od JSON-ovog tekstualnog podatka. Iako slični JSON-ov objekat nije JavaScript objekat! Razlike izmedju JSON-ove strukture (ime/vrednost) i objekata kod JavaScripta su:

  • Ime kod JSON-ove strukture može biti bilo koji validan string uključujući i beline dok kod JavaScript-a to nije dozvoljeno
  • Ime kod JSON-ove strukture mora da bude u dvostrukim navodnicima dok kod JavaScripta se ne koriste.

Pa je stoga neophodno prebaciti JSON-ov objekat u JavaScript objekat tj. izvršiti parsiranje koje će ukloniti znake navodnika i beline ako postoje.

Primer

Dodeljujemo promenjivoj neki JSON-ov podatak:

Pozivamo funkciju koja će da parsira JSON-ov tekst u JavaScript objekat:

Sada je uzimanje podataka iz Javascript objekta jednostavno i koristi za ubacivanje podataka u HTML:

Pored parse() postoji funkcija eval() ali ipak preporuceni nacin je da se koristi JSON.parse zbog veće sigurnosti. Korektno implementirani JSONparser prihvata jedino validan JSON, sprecavajuci potencijalno zlonameran kod od izvrsavanja nehotice.

JSON.stringify()

Ova funkcija radi suprotno od parsiranja, pravi od Javscript objekta validan JSON podatak.

Gde su parametri funkcije:

  • value – Vrednost koja se prebacuje u JSON string
  • replacer – (opciono)
  • space – (opciono) ubacuje beline u JSON string radi lakše preglednosti. Broj indicira broj belina

Primer primene

JSON se veoma često koristi kao padatak za razmenu izmedju klijenta i servera. U ovome primeru ćemo iz fajla mojiLinkovi.txt preuzeti ajax pozivom niz JSON-ovih objekata. Izvorni fajl sa JSON-om je:

U sledećem kod-u se šalje ajax zahtev serveru, koji vraća podatke u JSON obliku, nakon čega ih parsiramo i ispisujemo.

PHP i JSON

PHP podrška za JSON je u vidu dve funkcije:

  • json_encode()
  • json_decode()

Obe funkcije rade sa UTF-8 kodiranjem.

json_encode()

Ova funkcija uzima niz i vraća string reprezentaciju argumenta u JSON-ovom formatu ili false ako je došlo do greške.

Parametri funkcije su:

  • mixed $value je podatak koji treba da se formatira u JSON-ov format, može biti običan niz ili dvodimenzionalni niz kodiran sa UTF-8
  • $options je princip kojeg se funkcija pridržava pri formatiranju. Ukoliko se ne navede koristi defaultni normal princip. Može biti: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES,
    JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR
Primer

Rezultat funkcije je:

Primer

Vraća

json_decode()

Ova funkcija na osnovu string reprezentacije argumenta u JSON-om formatu formira odgovarajući objekat/asocijativni niz ili vraća NULL u slučaju greške.

Parametri funkcije su:

  • json_string − encodirani niz slova koji mora da bude UTF-8 kodiran.
  • assoc − je bolean-ova vrednost. Kada je TRUE vraća niz, a u suprotnom vraća objekat
  • depth − ceo broj koji specificira dubinu rekurzije
  • options − Ceo broj type bitmask of JSON decode, JSON_BIGINT_AS_STRING is supported.
Primer

ova funkcija vraća objekat:

Primer

ova funkcija vraća niz:

Podelite:

Ostavite komentar