200 likes | 429 Views
JSON. JavaScript Object Notation. 11732 Milo š Davidović. Uvod. JSON je jednostavan, tekstualan, otvoreni standard dizajniran za čitljivu razmenu podataka. Izveden je iz JavaScript jezika za predstavljanje jednostavnih struktura podataka i asocijativnih nizova, odnosno objekata.
E N D
JSON JavaScript Object Notation 11732 Miloš Davidović
Uvod • JSON je jednostavan, tekstualan, otvoreni standard dizajniran za čitljivu razmenu podataka. • Izveden je iz JavaScript jezika za predstavljanje jednostavnih struktura podataka i asocijativnih nizova, odnosno objekata. • Uprkos njegovoj bliskoj vezi sa JavaScript-om, JSON je nezavisan jezik sa parserima iza mnogedruge jezike. Ekstenzija je .json. • JSON format je često korišćen za serijalizaciju i prenos struktuiranih podataka preko mrežne veze, prvenstveno između servera i web aplikaicja, služeći kao alternativa za XML.
Istorija • Prvi put korišćen u „State Software” kompaniji čiji je osnivač Douglas Crockford. • JSON.org, je počeo sa radom 2002. godine. Decembra 2005. Yahoo počijne sa upotrebom JSON-a na nekim od svojih web servisa. Google počinje sa upotrebom JSON-a za svoje GData web protokole decembra 2006. • Iako je JSON bio zasnovan na podsetu JavaScript-a i uglavnom upotrevljavan sa tim jezikom, svrstava se u nezavistan format podataka. • Kod za parsiranje i kreiranje JSON podataka je dostupan za veliki broj programskih jezika. JSON-ov web sajt obezbeđuje obimnu listu postojećih JSON biblioteka.
Gramatika • JSON - tekst se sastojiodsekvencetokena. Set tokenauključuje set strukturnihkaraktera, stringove, brojeve, false, true i null. • JSON tekst je serijalizovan objekat ili niz. • JSON je tekst format za serijalizaciju struktuiranih podataka. Izveden je iz objekta literala JavaScript-a, kao sto je definisano u ECMAScript Programming Language. • String je sekvenca nula ili vise Unicode karaktera. • Objekat je neuređena kolekcija nula ili vise imena/promenljivih, gde je ime tipa string, a vrednosti moze biti string, bollean, null, objekat ili niz. • Niz je uređena sekvenca nula ili nekih drugih vrednosti. Termini „objekat” i „niz” potiču iz JavaScript-a. • Cilj JSON-a je da bude minimalan, portabilan, tekstualan i podskup JavaScript-a.
Ograničenja • Određene reči moraju biti ispisane malim slovima: • false, null, true, object, array, number i string. • Struktura objekta mora biti ograničena „{ }”. • Imena objekata trebaju biti jedinstvena. • Nizovi se predstavljaju „[ ]”, a elementi se odvajaju „ , ” . • Brojevi su slični kao i u mnogim programskim jezicima, dozvoljeno je stavljanje „ - ” ili E za eksponent. Decimale su dozvoljene. • Oktalni i heksadekadni brojevi nisu dozvoljeni kao i 0 na prvom mestu. • Stringovi počinju i završavaju sesa „”.
Primer 1: (predstavljanje objekta) • Objekat ima string polja za ime i prezime, polje za godine, i sadrzi i objekat koji ima adresu i broj telefona. { "firstName": "John", "lastName" : "Smith", "age" : 25, "address" : { "streetAddress": "21 2nd Street", "city" : "New York", "state" : "NY", "postalCode" : "10021" },
Primer 1 (nastavak) "phoneNumber": [ { "type" : "home", "number": "212 555-1234" }, { "type" : "fax", "number": "646 555-4567" } ] }
Pošto je JSON podset JavaScript-a, moguće je parsiranje JSON teksta u objekat, koristeći JavaScript funkciju eval(). • Npr. ako gore navedeni podatak sadrži JavaScript string promenljivu contact, moguće je kreirati JavaScript objekat p:var p = eval("(" + contact + ")"); • Promenljiva contact mora biti oivičena zagradama da bi se izbegla dvosmislenost u JavaScript sintaksi. • Preporučljiv način je da se koristi JSON parser. Ukoliko nismo sigurni u ispravnost teksta,ilipostojimogućnost da će se on shvatiti dvosmisleno, treba izbegavati funkciju eval(). • Ispravno implementiran JSON parser će prihvatiti samo ispravan JSON, sprečavajući na taj način izvršenje loših i neispravnih programa. • Današnji browseri kao sto su Firefox, Chrome, IE8 sadrže specijalne karakteristike za parsovanje JSON-a. Browser-ska podrška je efikasnija i sigurnija za upotrebu, za razliku od eval() funkcije.
Neusaglašenost • JavaScript sintaksa sadrži nekoliko osnovnih tipova podataka koji nisu uključeni u JSON standardu. • To su DATE, ERROR, MATH, regularni izrazi i funkcije. • Da bi se koristili u JSON-u, moraju se predstaviti u nekom drugom formatu podataka. • Od 2011. postoji nekoliko standarda za konvertovanje između datuma i stringova, ali ni jedan nije univerzalan. • Drugi jezici mogu imati različite skupove osnovnih tipova koji moraju biti pažljivo serijalizovani da bi se bavili ovom vrstom konverzije.
JSON vs. XML {"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } } }
IstitekstpredstavljenprekoXML-a: <menu id="file" value="File"> <popup> <menuitem value="New" onclick="CreateNewDoc()" /> <menuitem value="Open" onclick="OpenDoc()" /> <menuitem value="Close" onclick="CloseDoc()" /> </popup> </menu>
JSON vs. XML • Primer 2
JSON u Ajax-u • JSON se često koristi u Ajax tehnici. • Sledeći kod prikazuje kako klijent može koristiti XMLHttpRequest da zatraži objekat u JSON-formatu od servera. varmy_JSON_object = {}; varhttp_request = newXMLHttpRequest(); http_request.open("GET", url, true); http_request.onreadystatechange = function (){ var done = 4, ok = 200; if (http_request.readyState == done && http_request.status == ok) { my_JSON_object = JSON.parse(http_request.responseText); } }; http_request.send(null);
U ovomprimeruvidimodaXMLHttpRequestdozvoljavasintaksnevarijacijeza IE, Operu, Safari iMozzilabrowsere. • URL odgovornazahtevmorabiti u istom DNS domenukao server kojihostujestranicukojasadržizahtev. • Alternativno JSONP (JSONP-obrazackojiomogućavastranicidazahtevapodatkeod servera u različitimdomenima) prilazuključujekorišćenjekodiranepovratnefunkcijeprosleđeneizmeđu klijentaiserverakako bi dozvolilaklijentuda učitašifrovan-JSON podataksatreće stranedomenaidaobavestipozivaocafunkcijenakonizvršenja. • Ovo nameće nekebezbednosnerizikeidodatnezahteveza server. Dinamički <script> tagovimogutakođe da se koristezaprenos JSON podataka, alije ova tehnikanesigurna, pa je zbog toga predložen JSONRequestkaosigurnije rešenje.
Sigurnost • Generalno, kada je reč o script jezicima, postoje problemisasigurnošću. • Posto je JSON dizajnirankaopodskupJavaScripta, nasledio je inekenjegovenedostatke. • Ovinedostaci se odnosenadinamičkoizvršenje JSON-a kao JavaScript-a izlažućitako program “lutajućimilizlimskriptama”, kojemogubitipogubne, posebnoprilikomprenosapodatakasa interneta. Rešenjeovogproblema je korišćenjeeval() funkcije.
Pitanja: • Šta je JSON? • Čemu služi JSONP? • Kako se ostvaruje sigurnost kod JSON-a? • Od čega se sastoji JSON tekst?