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

Upotreba u Ajax-u

Podaci na istom domenu

Služi za prenos podataka jer XMLHttpRequest objekat zahteva podatak u JSON-ovom formatu od servera.

Primer

Primer Ajax poziva koji uzima podatke iz JSON strukture unutar tekstualnog fajla. Niz JSON-ovih objekata unutar fajla mojiLinkovi.txt izgleda ovako:

U sledećem kod-u se vrše navedene radnje:

  • Čitanje text fajla koristeći XMLHttpRequest objekat
  • Parsiranje i pravljenje JavaScript objekta
  • JavaScript objekat se zatim koristi u našoj funkciji i ispisuje stranicu.

Funkcija koja će da prikaže linkove na stranici:

Primer

U ovom primeru je Ajax poziv ka severu a Javascript kod koji bi trebao da preuzme JSON podatke sa servera, parsira ih i prikaže na HTML stranici u vidu tabele izgleda ovako:

PHP kod koji se izvršava na na serveru customers_mysql.php povlači podatke iz baze podataka i formatira ih u JSON podatak:

Podaci na drugom domenu i JSONP

Pošto Ajax ne dozvoljava povlačenje podataka sa drugog domena zbog tzv. cros-domain restrikcije koju nameće browser, klasičan način pozivanja ajax objekta neće biti moguć, stoga se pribegava suptilnijem rešenju pod nazivom JSONP (JSON with padding).

Princip rada:
  1. Potrebno je da se JSON-ov fajl koji se nalazi na serveru prepravi tako da se sav JSON kod izmedju krajnjih zagrada postane argument neke funkcije. Objasniću ovo na narednom primeru gde podaci u standardnom JSON formatu pre prepravke izgledaju ovako:

    Nakon prepravke su sav JSON-ov tekst prebačen u parametar funkcije a kod izgleda ovako:
  2. Zatim je potrebno na klijentskoj strani unutar Jquery ajax funkcije dodati callback parametar callback=? u url. Pa bi naša funkcija bih izgledala ovako:

    Ukoliko ne znamo naziv funkcije koja je uzela JSON-ov tekst kao parametar koristimo sličan kod:

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:

Pogledajte slične članke...

Podelite:

Ostavite komentar