Varijable, nizovi i objekti poznati su i praktičan oblik predstavljanja podataka. Uobičajeno je da se podaci opisuju u jeziku preglednika JavaScript, što nije potrebno raditi u jeziku PHP poslužitelj. JSON format vam omogućuje da ih sažmete u jednu cjelinu i ne fokusirate se na programski jezik. U ovom slučaju podaci se pretvaraju u parove: "ime = vrijednost". Vrijednost u svakom od njih također može biti skup takvih parova.
Uobičajeno je povezivati JSON s vitičastim zagradama i potonje je sasvim opravdano, budući da je JSON format = JavaScript Object Notation. Mnogo toga se promijenilo u posljednjim posebno dinamičnim godinama. Ono što je stvoreno za određenu svrhu često je donosilo neočekivane rezultate ili otvaralo nove horizonte.
Razmjena podataka: preglednik - poslužitelj AJAX tehnologija postala je tradicionalna, redovito osvježavanje stranice u cijelosti je prestala biti popularna. Posjetitelj otvarajući stranicu pokreće niz parcijalnih razmjena podataka, kada se određene stranice mijenjaju samo na onom mjestu koje je relevantno.
![](https://i1.wp.com/fb.ru/misc/i/gallery/11007/1746095.jpg)
Vjeruje se da je pojava JSON-a povezana s upotrebom AJAX-a, no zapravo, asocijativnost i njezina objektna notacija (značajke sintakse za opisivanje i korištenje objekata) imaju mnogo srodniji odnos s JSON-om nego razmjena podataka između preglednik i poslužitelj.
Budući da je sadržaj stranica modernih stranica doista postao “masivan” (glomazan), učinkovitost formata za razmjenu podataka dobila je posebnu važnost. To ne znači da je JSON postao novi prikaz podataka, ali značajna je činjenica da je dugo bio element JavaScript sintakse.
![](https://i0.wp.com/fb.ru/misc/i/gallery/41493/1745503.jpg)
Upotreba ćirilice u imenovanju varijabli vrlo je neočekivana pojava (glupost), ali funkcionira u najnovije verzije Chrome, Firefox pa čak i Internet Explorer 11.
Ćirilica i JSON Naravno, nema smisla koristiti ovaj potpuno neočekivani fenomen, prisjećajući se kako se lako vrijednosti varijabli napisanih ruskim slovima pretvaraju u besmislicu: što možemo reći o imenima, posebno vanjskim.
Sumnja se da će inicijativu u ćiriličnim imenima podržati vanjsko okruženje preglednika, s kojim se stalno mora nositi. Ali ova činjenica zaslužuje pozornost iz jednostavnog razloga što je JSON format mogućnost pisanja imena i vrijednosti po želji programera. Ovo je važno jer u svakom zadatku opis područja primjene kako to zahtijeva značajno pojednostavljuje otklanjanje pogrešaka i smanjuje broj pogrešaka.
Nije važno što je točno bila osnova sintaktičke inovacije - JSON - važno je da je dala zakonsko pravo i stvarnu priliku za postavljanje korespondencije: "bilo koje ime = bilo koja vrijednost".
![](https://i0.wp.com/fb.ru/misc/i/gallery/41493/1745979.jpg)
Moramo odati počast jeziku JavaScript: ono što daje sintaksa ne obvezuje programera i ne nameće mu ništa. Programer slobodno koristi sintaksu jezika kako bi optimalno formirao model podataka i algoritam za njihovu upotrebu.
PHP i JSON Prihvaćanjem podataka u JSON formatu, poslužitelj (posebno putem PHP-a) pruža mogućnost da ih obradi onakvima kakvi jesu i vrati rezultat natrag pregledniku u sličnom formatu. PHP izvorni niz:
- $cJSON = niz ("a"=> "alfa", "b"=> "beta", "g"=> "gama").
Pretvori u JSON za isporuku pregledniku:
- $cJS = json_encode($cJSON).
Proizlaziti:
- ("a":"alfa","b":"beta","g":"gama").
Dopušteno je gniježđenje prikazano na fotografiji.
![](https://i1.wp.com/fb.ru/misc/i/gallery/41493/1745580.jpg)
Ovdje je generiranom nizu dodan novi element “u sebe” s automatskim indeksom “0”, a zatim ponovno s navedenim indeksom “z”.
Json_decode() pretvara JSON niz u PHP niz. Slični rezultati mogu se postići manipuliranjem funkcija i explode(). U nekim slučajevima ova je opcija poželjnija.
Razina gniježđenja Elementi se mogu ugniježditi i na strani preglednika i na strani poslužitelja. U praksi, JSON format (opis standarda RFC 4627) pruža znatno više od 4 razine ugniježđivanja, ali ovu značajku ne treba zlorabiti.
Najbolje je nikada ne ići dalje od razumne dostatnosti; čini kod čitljivim, olakšavajući otklanjanje pogrešaka i razumijevanje drugim programerima.
JSON se obično naziva podatkovnim konstrukcijama koje su jednostavnije od XML-a i razumljive i ljudima i računalima. To vrijedi kada je količina podataka mala i programer je mudro odabrao razinu ugniježđivanja. U svim drugim slučajevima, brojanje broja zagrada i razumijevanje je teško i na strani preglednika i na strani poslužitelja.
JSON datoteke Korištenje JSON-a u praksi često nije ograničeno na čitljiv kratki niz. Svaka konstrukcija podataka uvijek je pragmatična. U isto vrijeme, JSON se može učinkovito koristiti iu stvarnim podacima o zadacima (osoblje poduzeća) i za implementaciju privremenih podataka (predmemorija objekata).
Osoblje poduzeća i JSON format: primjer Obično je zapis o jednoj osobi prezime, ime, patronim, godina rođenja, specijalnost, obrazovanje, ... i nekoliko drugih jednostavnih vrijednosti. Čak iu posebno zahtjevnim tvrtkama evidencija o jednoj osobi neće prelaziti desetak ili dva polja. To je vidljivo i može se smjestiti u niz baze podataka.
Ako tvrtka zapošljava više ljudi, to je jedno, a ako ih ima nekoliko desetaka tisuća, to je sasvim drugo. Možete nastaviti koristiti bazu podataka, ali njezino pohranjivanje kao datoteka čini se praktičnijim i pristupačnijim za korištenje.
![](https://i0.wp.com/fb.ru/misc/i/gallery/41493/1745988.jpg)
JSON je normalan tekstualna datoteka. Slučaj s kadrovskom tablicom, bez obzira na sve. Uvijek ga možete pročitati. Otvaranje i uređivanje također je dostupno u svakom uređivaču teksta koji nema naviku dodavati vlastite servisne informacije sadržaju datoteke. Općenito, *.json je čisti tekst i unutar preglednika i unutar datoteke - niz.
Fotografija prikazuje cache objekta koji čini sliku, primjer.
![](https://i0.wp.com/fb.ru/misc/i/gallery/41493/1745623.jpg)
Ovo je primjer sadržaja datoteke koju je generirala stranica koja nudi 3D ispis u boji na šalice i keramiku. Naravno, s takvim JSON formatom odlučiti kako ga otvoriti doista je problematično. Međutim, u ovom i sličnim slučajevima nema problema s čitanjem datoteke: PHP čita datoteku, analizira je i prosljeđuje pregledniku. Podaci koje je posjetitelj promijenio vraćaju se na poslužitelj i zapisuju.
![](https://i0.wp.com/fb.ru/misc/i/gallery/41493/1745994.jpg)
U ovom slučaju upotrebe, datoteka djeluje kao varijabla koja je pohranjena izvan koda. Ako je potrebno, varijabla prima vrijednost iz datoteke, a ako je promijeni posjetitelj u dijalogu koji nudi stranica, tada će sve promjene biti zabilježene takve kakve jesu. Nema potrebe čitati i provjeravati sadržaj datoteke.
JSON se često koristi za pohranjivanje i korištenje servisnih informacija - ovo nije tablica osoblja i ne moraju je vidjeti ni programer ni posjetitelj stranice.
XML i JSON “Za sve postoji vrijeme” je klasična spoznaja prihvaćena kao aksiom i prije pojave programiranja. “Ništa se ne pojavljuje samo” - to je također bilo prije nego što je čovjek napisao prvi razumljivi program na umjetnom jeziku.
![](https://i1.wp.com/fb.ru/misc/i/gallery/41493/1745996.jpg)
Formati podataka proizlaze iz stvarnih potreba i temelje se na stečenom znanju. HTML ima svoju stazu, XML ima svoju stazu, a JSON je JavaScript objektna logika proširena na druge jezike. Uspoređivati jedno s drugim nije najbolja stvar. Svakom svoje.
XML se izvrsno nosi sa svojim zadacima i očito neće postati povijest. A JSON se koristio do 2006., samo što nije svaki programer smatrao svojom dužnošću deklarirati određene opcije za predstavljanje svojih podataka.
Bilo je slučajeva u praksi kada su programi napisani u BASIC-u koji nisu koristili JSON kao takav, ali su savršeno pohranili parove “ime = vrijednost” i učinili ih dostupnim pravim algoritmima u pravo vrijeme.
Posebni znakovi (“`”, “~”, “|”, ...) i formati podataka Navika rada s asocijativnim nizovima i objektima u JavaScriptu čini upotrebu JSON-a prirodnom i praktičnom. Ovo je doista sjajan format, ali mogućnost odvajanja i spajanja, manipuliranja nizovima i nizovima ima mnogo dublje korijene.
![](https://i2.wp.com/fb.ru/misc/i/gallery/41493/1745721.jpg)
Funkcije spajanja/razdvajanja JavaScript jezika i implode/explode PHP jezika omogućuju praktično i učinkovito korištenje oba formata XML podaci, JSON i svoju verziju. Potonji je često optimalan, dok su prva dva idealna za opcije opće uporabe. Ako se informacije prenose drugom programeru, poslužitelju, datoteci ili bazi podataka, ne postoji bolji način za pronalaženje XML-a i JSON-a. Svi rade s njima, tako da prijenos/prijem informacija ne zahtijeva komentare.
Korištenje JSON-a u Androidu Čitanje i pisanje podataka u JSON formatu u Androidu nije samo norma, već postoje i mnogi objekti usmjereni na rad s ovim određenim formatom podataka.
![](https://i2.wp.com/fb.ru/misc/i/gallery/41493/1746008.jpg)
U ovom slučaju koristi se JSON format. Možda je to točno, ali nije riječ o fenomenalnosti društvenih mreža, već o tome da je prezentiranje informacija u formatu "ime=vrijednost" pogodno i za programiranje i za korištenje. Za razliku od strogog i složenog "XML-a", ovo je doista format prilagođen ljudima.
Asocijativni nizovi Događa se da varijable moraju biti opisane (JavaScript) ili barem navedena početna vrijednost (PHP). U oba slučaja, varijabla može vrlo lako promijeniti svoj tip. Jezik ovu konverziju izvodi automatski ako je potrebno.
![](https://i2.wp.com/fb.ru/misc/i/gallery/41493/1746015.jpg)
Ali zašto varijabla također ne bi promijenila ime, pojavila se tijekom izvođenja algoritma i nestala kada više nije potrebna? Asocijativni nizovi rješavaju ovaj problem, ali onda kada se koriste takve relativno dinamičke varijable, naziv polja i odgovarajući sintaktički konstrukti će slijediti mjesto gdje se koriste.
Ova je okolnost posebno izražena u PHP-u, ali s njom se možete pomiriti, kao i sa simbolom “$” u nazivu varijable i kombinacijom “$this->” unutar objekta. Programiranje u JavaScriptu i PHP-u u isto vrijeme, prvo se stvarno začudite koliko je sve drugačije, ali onda sve postane tako poznato i prirodno...
Asocijativni niz -> JSON U ovom primjeru *.docx dokument kreiran je pomoću PHPOffice/PHPWord biblioteke, a polje aProperties sadrži svojstva tog dokumenta (autor, tvrtka, naslov, kategorija, datum izrade...).
![](https://i0.wp.com/fb.ru/misc/i/gallery/41493/1746017.jpg)
Drugi niz sadrži podatke za stranicu:
- orijentacija (pejzažna ili normalna);
- okomite i vodoravne dimenzije;
- uvlake (margine lijevo, gore, dolje, desno);
- zaglavlja i podnožja.
![](https://i0.wp.com/fb.ru/misc/i/gallery/41493/1745869.jpg)
Dokument se generira na poslužitelju na kojem je instalirana PHPOffice/PHPWord biblioteka. Stranica vam omogućuje upravljanje vrijednostima ovih nizova pomoću JavaScripta. Rezultat u JSON formatu vraća se natrag na poslužitelj i koristi u PHP algoritmima, u njegovim konstrukcijama, odnosno u nizovima.
Dinamičke varijable JSON format rješava problem dinamičkih varijabli. Ovdje možete stvarati, mijenjati i brisati varijable bez nepotrebnog sintaktičkog nereda. Izgleda lijepo i koristi se u JavaScriptu.
![](https://i2.wp.com/fb.ru/misc/i/gallery/41493/1745842.jpg)
U ovom primjeru funkcija GetOjInfo() dohvaća naziv vrijednosti i vrijednost iz objekta. U početku, objekt niza JSON dodijeljen varijabli ojInfo ima tri elementa: ime, dob i posao. Malo kasnije dodaje se varijabla Status.
![](https://i2.wp.com/fb.ru/misc/i/gallery/41493/1745850.jpg)
Nakon prvog operatora brisanja, linija ojInfo gubi element starosti, nakon drugog brisanja gubi element rada. Ako pretpostavimo da je ovaj niz niz varijabli koje imaju određeno značenje, tada pomoću JSON-a zapravo možete stvarati, mijenjati i brisati bilo koji njihov skup izvan operativnog polja (sintakse) opisa i obrade JavaScript jezika.
Format JSON nije dizajniran za ovu opciju, ali je moguć, praktičan i prikladan.
), te između samih poslužitelja (HTTP softverska sučelja). Format JSON također je prikladan za pohranu složenih dinamičkih struktura u relacijske baze podataka ili predmemorije datoteka.
Budući da je JSON podskup JavaScript sintakse, može se brzo deserijalizirati pomoću ugrađene funkcije eval(). Osim toga, moguće je umetnuti potpuno funkcionalne JavaScript funkcije. U PHP-u, počevši od verzije 5.2.0, podrška za JSON uključena je u jezgru u obliku funkcija json_decode() i json_encode(), koje same pretvaraju JSON tipove podataka u odgovarajuće PHP tipove i obrnuto.
Sintaksa JSON je izgrađen na dvije strukture:
- Skup parova ključ/vrijednost. Na raznim jezicima ovo se implementira kao objekt, zapis , struktura , rječnik , hash tablica , ključna lista ili asocijativno polje . Ključ može biti samo niz, vrijednost može biti samo bilo kojeg oblika.
- Numerirani skup vrijednosti. U mnogim jezicima ovo se implementira kao niz, vektor, lista ili niz.
To su univerzalne strukture podataka. Teoretski, sve moderni jezici programiranje ih podržava u ovom ili onom obliku. Budući da se JSON koristi za razmjenu podataka između različitih programskih jezika, ima smisla izgraditi ga na ovim strukturama.
U JSON-u se koriste sljedeći oblici:
- Objekt je neuređeni skup parova ime/vrijednost u vitičastim zagradama ( ). Između naziva i vrijednosti nalazi se simbol ": "
, a parovi ime/vrijednost odvojeni su zarezima.
- Niz (jednodimenzionalni) je skup vrijednosti koje imaju serijske brojeve (indeks). Niz je u uglatim zagradama. Vrijednosti su odvojene zarezima.
- Vrijednost može biti crta u dvostrukim navodnicima, broj, vrijednost pravi ili lažno, objekt, niz, odnosno vrijednost ništavan. Ove strukture mogu biti ugniježđene jedna u drugu.
- Niz je uređeni skup od nula ili više Unicode znakova, zatvorenih u dvostruke navodnike, koristeći obrnute kose crte za izbjegavanje nizova. Znakovi su predstavljeni kao jednostavan niz.
- Ime je niz.
Crta vrlo sličan nizu u jezicima i Javi. Broj također vrlo sličan C ili Java broju, osim što se koristi samo decimalni format. Razmaci se mogu umetnuti između bilo koja dva znaka.
Sljedeći primjer prikazuje JSON prikaz objekta koji opisuje osobu. Objekt ima niz polja imena i prezimena, objekt koji opisuje adresu i niz koji sadrži popis telefonskih brojeva.
( "ime" : "Ivan" , "prezime" : "Ivanov" , "adresa" : ( "adresa ulice" : "Moskovskoe sh., 101, apt. 101" , "grad" : "Lenjingrad" , "poštanski broj" : 101101 ) , "telefonski brojevi" : [ "812 123-1234" , "916 123-4567" ] )
U XML-u bi takva struktura izgledala otprilike ovako:
Ivan Ivanov Moskovskoe sh., 101, kv. 101 Lenjingrad 101101 812 123-1234 916 123-4567
812 123-1234
916 123-4567
Usporedba s YAML-om I funkcionalno i sintaktički, JSON je podskup YAML jezika. Konkretno, specifikacija YAML 1.2 navodi da je "svaka JSON datoteka valjana YAML datoteka." Najčešći YAML parser također može obraditi JSON. YAML specifikacija prije verzije 1.2 nije u potpunosti pokrivala JSON, prvenstveno zbog nedostatka izvorne podrške za UTF-32 u YAML-u, kao i zbog zahtjeva za razmakom iza razdjelnika zareza. Osim toga, JSON specifikacija uključuje /* */ komentare stila.
Najvažnija razlika u YAML-u je skup proširenja sintakse koji nemaju analogije u JSON-u:
Relacijski: YAML podržava relacijske podatke: u YAML dokumentu možete se pozvati na sidro koje se ranije pojavilo u datoteci/streamu. Rekurzivne strukture mogu se izraziti na ovaj način. Proširivost: YAML podržava proširive tipove podataka izvan primitivnih (tj. nizovi, brojevi, booleovi). Blokovi: U YAML-u je dostupna sintaksa uvučenih blokova; omogućuje vam opisivanje strukturiranih podataka bez korištenja nepotrebnih simbola (sve vrste zagrada, navodnika itd.).
JSON shema JSON shema je jedan od jezika za opisivanje strukture JSON dokumenta. Koristi JSON sintaksu. Temeljeno na konceptima XML Schema, RelaxNG, Kwalify. JSON shema je samoopisni jezik: kada se koristi, isti alati za serijalizaciju/deserijalizaciju mogu se koristiti za obradu podataka i opisivanje njihove valjanosti.
Korištenje JSON-a u Ajaxu Sljedeći primjer Javascript koda pokazuje kako preglednik može upotrijebiti XMLHttpRequest za zahtjev JSON formatiranog objekta od poslužitelja (poslužiteljska strana programa je izostavljena; mora sadržavati kod koji šalje podatke kao JSON niz kao odgovor na zahtjeve url).
Var the_object; var http_request = new XMLHttpRequest() ; http_request.open("GET", url, istina); http_request.send(null); http_request.onreadystatechange = function () ( if ( http_request.readyState == 4 ) ( if ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( alert( "Došlo je do problema s URL." ) ; ) http_request = null ; ) ) ;
Imajte na umu da ovaj primjer korištenja XMLHttpRequesta nije univerzalan za sve preglednike (za preglednike temeljene na Internet Exploreru, Operi, Safariju i Mozilli, trebale bi postojati neke razlike u kodu). Upotreba XMLHttpRequesta ograničena je zbog iste politike porijekla: URL odgovora na zahtjev mora biti u istoj DNS domeni kao i poslužitelj na kojem se nalazi stranica koja traži odgovor. Alternativa je JSONP pristup, koji uključuje korištenje kodiranog poziva funkcije koji se prosljeđuje između klijenta i poslužitelja tako da klijent može učitati JSON-kodirane podatke s domena trećih strana i obavijestiti pozivatelja o završetku, iako to predstavlja neke sigurnosne rizike i dodatni zahtjevi poslužitelja.
Alternativno, kôd stranice može koristiti elemente za asinkrono traženje JSON podataka ili jednostavno . Ovi su pristupi bili uobičajeni prije nego što je široko rasprostranjena podrška za XMLHttpRequest bila dostupna.
Također možete koristiti istu politiku izvora za prijenos JSON podataka pomoću dinamičkih oznaka, ali to rezultira ranjivim kodom. Kao sigurnija alternativa, predloženo je korištenje JSONRequest.
Sigurnosna pitanja Iako je JSON namijenjen za prijenos podataka u serijaliziranom obliku, njegova sintaksa slijedi JavaScript sintaksa a to stvara niz sigurnosnih problema. Često se za obradu podataka primljenih iz vanjskog izvora u JSON formatu na njih primjenjuje funkcija eval() bez ikakve prethodne provjere.
JavaScript eval() Budući da se čini da je JSON sintaktički ispravan dio JavaScript koda, najjednostavniji način za raščlanjivanje JSON podataka u JavaScript programu je korištenje ugrađenog JavaScript funkcije eval() , koji je dizajniran za izvršavanje JavaScript izraza. Uz ovaj pristup, nema potrebe za korištenjem dodatnih parsera.
Tehnika eval() čini sustav ranjivim ako izvor korištenih JSON podataka nije pouzdan ( Engleski). Takvi podaci mogu biti zlonamjerni JavaScript kod za napade ubrizgavanjem koda ( Engleski). Koristeći ovu ranjivost, moguće je ukrasti podatke i krivotvoriti autentifikaciju. Međutim, ranjivost se može ukloniti korištenjem dodatnih alata za provjeru valjanosti podataka. Na primjer, prije izvršavanja eval(), podaci primljeni iz vanjskog izvora mogu se potvrditi pomoću regularnih izraza. RFC koji definira JSON predlaže korištenje sljedećeg koda za provjeru usklađenosti s JSON formatom
Varijanta moj_JSON_objekt = ! (/[^,:()\[\]0-9.\-+Eaeflnr-u \n\r\t]/ .test ( text.replace (/"(\\.|[^"\\] )*"/g , "" ) ) ) && eval("(" + tekst + ")" ) ;
Kako je predložena sigurnija alternativa eval(). nova značajka parseJSON(), koji može obraditi samo JSON podatke. Predstavljen je u verziji 4 standarda ECMAScript i opisan je u članku "JSON: alternativa XML-u s niskim udjelom masti". Trenutno je dostupan kao JavaScript biblioteka i bit će uključen u peto izdanje ECMAScripta.
Ugrađeni JSON Novije verzije web preglednika imaju ugrađenu podršku za JSON i mogu ga obraditi bez pozivanja funkcije eval(), što dovodi do opisanog problema. Obrada JSON-a obično je brža u ovom slučaju. Tako su u lipnju 2009. sljedeći preglednici imali ugrađenu JSON podršku:
Najmanje pet popularnih JavaScript biblioteka koristi ugrađeni JSON kada je dostupan:
Krivotvorenje zahtjeva među domenama Loša upotreba JSON-a čini stranice ranjivima na krivotvorenje zahtjeva između stranica (CSRF ili XSRF). Budući da oznaka dopušta upotrebu izvora koji ne pripada istoj domeni kao resurs koji je koristi, dopušta izvršavanje koda pod krinkom JSON podataka u kontekstu proizvoljne stranice, što omogućuje kompromitiranje lozinki ili druge osjetljive informacije o korisnicima provjerenim na drugoj stranici.
Čini se da je to problem samo ako JSON podaci sadrže osjetljive informacije koje bi treća strana mogla ugroziti i ako se poslužitelj oslanja na politiku jednog izvora ( Engleski), blokiranje pristupa podacima kada se otkrije vanjski zahtjev. To nije problem ako poslužitelj utvrđuje valjanost zahtjeva, dajući podatke samo ako su točni. HTTP kolačići se ne mogu koristiti za utvrđivanje toga. Isključivo korištenje HTTP kolačića koristi se za krivotvorenje zahtjeva između web-mjesta.
JSONP & JSONPP JSONP (JSON Padding) ili "JSON s paddingom" proširenje je JSON-a kada je naziv funkcije povratnog poziva naveden kao ulazni argument.
Tehnologija se temelji na činjenici da sigurnosna politika preglednika dopušta korištenje oznake za pristup poslužiteljima koji nisu poslužitelj s kojeg je stranica učitana.
Bez upotrebe JSONP tehnologije (to jest, koristeći samo JSON kodiranje podataka), poslužitelj može vratiti samo podatke. Na primjer ovako:
("papir": "A4", "broj": 5)
Međutim, to su samo podaci i ne mogu utjecati na preglednik.
Koristeći tehniku JSONP, naziv funkcije povratnog poziva prosljeđuje se poslužitelju treće strane u liniji poziva (GET):
Ovdje parametar jsonp sadrži naziv funkcije povratnog poziva parseResponse.
Sada strani poslužitelj example.com može vratiti sljedeći kod:
ParseResponse(( "papir" : "A4" , "broj" : 5 ) )
Kod sada poziva javascript funkciju prve domene.
Ideja je izvorno predložena na MacPython blogu 2005. godine, a trenutno je koriste mnoge Web 2.0 aplikacije kao što su Dojo Toolkit Applications, Google Toolkit Applications i zanox Web Services. Predložena su daljnja proširenja ovog protokola za uključivanje dodatnih argumenata, kao što je podrška JSONPP-a za S3DB web usluge.
Budući da JSONP koristi oznake skripte, pozivi su u biti otvoreni za svijet. Iz tog razloga JSONP može biti neprikladan za pohranu osjetljivih podataka.
Omogućavanje oznaka skripti s udaljenih web-mjesta omogućuje im prijenos bilo kojeg sadržaja na web-mjestu. Ako udaljena stranica ima ranjivosti koje dopuštaju umetanje Javascripta, tada bi izvorna stranica također mogla biti pogođena ranjivostima.
JSONPP (parametrizirani JSON s paddingom) Parametrizirani JSON s paddingom - razvoj JSONP ideje
JSONPP uključuje izvorni URL, naziv funkcije koja će obraditi JSON podatke, redak za eval nakon primanja podataka i redak za eval nakon završetka obrade podataka:
JSON_poziv(SRC, JSONP, JSONPP, UKLOTI) ;
na kraju se okrene
Ans = JSONP(SRC) ( eval(JSONPP(ans)) ; eval(ONLOAD) ;)
Općenito, broj parametara nije bitan za samu ideju JSONPP-a. Dovoljni su SRC, JSONP, JSONPP (i njihova obrada na strani poslužitelja pa na strani klijenta) da bude JSONPP.
Pogledajmo primjer rada s uslugom S3DB.
Funkcija s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement ("script.id" = call script.type = "text/javascript" ; // korištenje podstavljenog, parametriziranog json src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ " &onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (skripta) ; // dohvaćanje odgovora) funkcija s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; return ans; ) funkcija remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )
U primjeru, funkcija s3db_jsonpp_call() stvara element skripte u DOM-u u glavnom dijelu, čiji src odgovara JSONPP pozivu.
Nakon primitka odgovora od poslužitelja, s3db_jsonpp() će biti pozvan - prosljeđuje se u parametrima poziva, kao što bi trebalo biti prema JSONP pravilima.
Unutar s3db_jsonpp() eval(jsonpp) aktivirat će se i vratiti vrijednost ans.
Pozivanje eval(onload) dovodi do izvršavanja remove_element_by_id() s id-om stvorene skripte u glavi i konačno do njenog brisanja, jer se ionako neće koristiti jer je id u primjeru generiran nasumično na samom početku funkcija s3db_jsonpp_call(). Ovaj poziv je u odgovoru poslužitelja.
Reference objekata Standard JSON ne podržava reference na objekte, ali Dojo Toolkit pokazuje kako standardni JSON može podržati takve reference pomoću dodatnih konvencija. Konkretno, modul dojox.json.ref pruža podršku za nekoliko oblika veza, uključujući kružne, višestruke, međudokumentne i lijene veze.
Vidi također Bilješke YAML nije jezik za označavanje (YAML™) verzija 1.2 (engleski) . - Radni nacrt 2008-05-11.(nedostupan link - priča) Preuzeto 24. rujna 2009.
. RedHanded (7. travnja 2005.). Preuzeto 25. rujna 2012. .
Json.Com Prijedlog JSON sheme (nedostupna veza - priča)
RFC 4627
JSON: Fat Free alternativa XML-u. Arhivirano
json2.js (engleski) . Arhivirano iz izvornika 12. veljače 2012. Preuzeto 24. rujna 2009.
Korištenje ugrađenog JSON-a.
Ugrađeni JSON u IE8. Arhivirano iz originala 12. veljače 2012.
Web specifikacije podržane u Opera Presto 2.5 (engleski) (10. ožujka 2010.). Arhivirano iz izvornika 12. veljače 2012. Preuzeto 29. ožujka 2010.
ES 3.1 implementacija JSON objekta.
Ulaznica #4429lang=en . Arhivirano iz originala 12. veljače 2012.
Ulaznica #4429 (22. svibnja 2009.). Arhivirano iz originala 12. veljače 2012. Preuzeto 3. srpnja 2009.
Ulaznica #8111lang=en . Arhivirano iz originala 12. veljače 2012.
MooTools Core & More 1.3.1. Arhivirano iz originala 12. veljače 2012.
YUI 2: JSON pomoćni program (1. rujna 2009.). Arhivirano iz izvornika 12. veljače 2012. Preuzeto 22. listopada 2009.
Naučite JSON (7. travnja 2010.). Arhivirano iz izvornika 12. veljače 2012. Preuzeto 7. travnja 2010.
Jeremy Grossman Napredne tehnike napada na web aplikacije koje koriste GMail. WhiteHat Sigurnost. Arhivirano iz izvornika 12. veljače 2012. Preuzeto 23. rujna 2009.
from __future__ import * » Remote JSON - JSONP . bob.pythonmac.org. Arhivirano iz izvornika 12. veljače 2012. Preuzeto 8. rujna 2008.
Almeida, Jonas (11. lipnja 2008.). "JSON, JSONP, JSONPP? "(S3DB). Preuzeto 26.4.2009.
RIAspot JSON P za Cross Site XHR .(nedostupna veza - priča)
JSON referenciranje u Dojou. Arhivirano iz originala 12. veljače 2012. Linkovi - Početna stranica službenog formata na ruskom
- json.js, json2.js je biblioteka koju je razvio Douglas Crockford za rad s JSON podacima u JavaScriptu. Proširuje se objekt Objekt metoda toJSONString, koja je tada prisutna u bilo kojem objektu i pretvara ga u niz JSON formata.
- json-rpc.org (engleski)
Jezici za označavanje dokumenata
Uredski dokumenti Format složenog dokumenta OOXML (SpreadsheetML, PresentationML, WordprocessingML) |
Ljudi upoznati s programiranjem odmah će prepoznati datoteke s ekstenzijom JSON. Ovaj format je skraćenica od JavaScript Object Notation i u biti je tekstualna razmjena podataka koja se koristi u programskom jeziku JavaScript. U skladu s tim, specijalizirani softver ili uređivači teksta pomoći će vam da se nosite s otvaranjem takvih datoteka.
Glavna značajka skripti u JSON formatu je njihova zamjenjivost s XML formatom. Obje vrste su tekstualni dokumenti, koji se može otvoriti programima za obradu teksta. Međutim, počet ćemo sa specijaliziranim softverom.
Metoda 1: Altova XMLSpy Prilično dobro poznato razvojno okruženje, koje koriste i web programeri. Ovo okruženje također generira JSON datoteke i stoga može otvoriti dokumente trećih strana s ovim proširenjem.
![](https://i2.wp.com/lumpics.ru/wp-content/uploads/2017/10/Otkryit-fayl-v-Altova-XMLSpy.png)
Ovaj softver ima dva nedostatka. Prvi je plaćena distribucijska osnova. Probna verzija aktivna je 30 dana, ali da biste je primili morate unijeti ime i poštanski sandučić. Drugi je opća nezgrapnost: osobi koja samo treba otvoriti datoteku može se činiti previše sofisticiranom.
Metoda 2: Notepad++ Višenamjenski uređivač teksta Notepad++ prvi je na popisu skripti pogodnih za otvaranje JSON formata.
![](https://i2.wp.com/lumpics.ru/wp-content/uploads/2017/10/Otkryit-dokument-cherez-menyu-Fayl-v-Notepad.png)
Notepad++ ima puno prednosti - prikazuje sintaksu mnogih programskih jezika, podržava dodatke, male je veličine... Međutim, zbog nekih značajki program radi sporo, pogotovo ako u njemu otvorite veliki dokument.
Metoda 3: AkelPad Nevjerojatno jednostavan i istovremeno bogat uređivač teksta ruskog programera. Formati koje podržava uključuju JSON.
![](https://i2.wp.com/lumpics.ru/wp-content/uploads/2017/10/Vospolzovatsya-menyu-Fayl-v-AkelPad.png)
Kao i Notepad++, ova je opcija notepada također besplatna i podržava dodatke. Radi brže, ali se velike i složene datoteke možda neće otvoriti prvi put, pa imajte na umu ovu značajku.
Metoda 4: Komodo Edit Besplatni softver za pisanje programski kod iz Komoda. Ima moderno sučelje i široku podršku za programere.
![](https://i0.wp.com/lumpics.ru/wp-content/uploads/2017/10/Dobavit-fayl-v-programmu-Komodo-Edit.png)
Nažalost, program nema ruski jezik. Međutim, prosječnog korisnika prije će odbiti pretjerana funkcionalnost i nerazumljivi elementi sučelja - uostalom, ovaj uređivač je prvenstveno namijenjen programerima.
Metoda 5: Uzvišeni tekst Još jedan predstavnik orijentiranih na kod uređivači teksta. Sučelje je jednostavnije od sučelja njegovih kolega, ali mogućnosti su iste. Dostupna je i prijenosna verzija aplikacije.
![](https://i1.wp.com/lumpics.ru/wp-content/uploads/2017/10/Nachat-dobavlenie-faylov-v-Sublime-Text.png)
Nažalost, Sublime Text nije dostupan na ruskom. Model distribucije sharewarea također se može nazvati nedostatkom: besplatna verzija nije ni na koji način ograničena, ali s vremena na vrijeme pojavljuje se podsjetnik o potrebi kupnje licence.
Metoda 6: NFOPad Jednostavna bilježnica također je prikladna za pregledavanje dokumenata s ekstenzijom JSON.