JSON format: primjer i opis

20. 2. 2019.

JSON je skraćenica od Java skripta Object Notation (Objašnjenje objekta), format koji koristi čitljiv tekst prijenos podataka koji se sastoji od parova atributa-vrijednosti. To je najčešći format podataka koji se koristi za asinkronu komunikaciju između preglednika i poslužitelja, uglavnom zamjenjujući XML (koristeći AJAX).

json format

JSON je format podataka neovisan o jeziku koji je izveden iz JavaScripta. Od 2017. mnogi programski jezici koriste kod za generiranje i analizu podataka u njemu. JSON nazivi datoteka koriste proširenje .json.

Povijest stvaranja

Izvorni JSON format razvio je Douglas Crockford na početku nule, a zatim su ga u 2013. definirali dva konkurentna standarda (RFC 7159 i ECMA-404). ECMA standard opisuje samo valjanu sintaksu, dok RFC obuhvaća neke od osnove sigurnosti i interoperabilnosti.

Osim toga, tu je i RFC 7493 standard koji definira ograničeni profil poznat kao I-JSON (skraćeno od "Internet JSON"). On nastoji prevladati neke od problema interakcije. Svaki takav dokument je važeći JSON dokument.

Potreba za stvaranjem ovog formata izrasla je iz potrebe za stvarnim protokolom komunikacije između poslužitelja i preglednika, koji se provodi u stvarnom vremenu bez upotrebe dodataka (kao što su Flash ili Java apleti).

json format nego otvoren

Razvoj i primjena

Kao što je već napomenuto, Douglas Crockford, kao tvorac StateSoftwarea, najprije je identificirao i popularizirao JSON format. Nakon toga, suosnivači su se složili da kreiraju sustav koji koristi standardne mogućnosti preglednika i osigurali sloj apstrakcije za programere kako bi stvorili aplikacije s kontinuiranim dupleks povezivanjem na web poslužitelj. Istovremeno, postalo je moguće otvoriti dvije HTTP veze i obraditi ih do standardnog vremena preglednika ako nema razmjene podataka. Suosnivači su održali raspravu na okruglom stolu i glasovali za imenovanje JSML ili JSON formata podataka, kao i za određivanje vrste licence pod kojom će novi razvoj biti dostupan. Trenutno je format otvorenog koda.

json format online

Praktična uporaba

Web stranica JSON.org pokrenuta je 2002. godine. U prosincu 2005. Yahoo! počeo je nuditi neke od svojih web usluga u ovom formatu. Google je počeo koristiti JSON feedove za svoj web-protokol GData tek u prosincu 2006. godine.

izvorno format datoteke JSON je bio namijenjen za podskup JavaScript skriptnog jezika (osobito Standard ECMA-262 3. izdanje-prosinac) i obično se koristio s njim. Međutim, to je format neovisan o jeziku podataka. Kôd za raščlanjivanje i generiranje JSON podataka dostupan je u mnogim programskim jezicima. Web-mjesto JSON navodi sve knjižnice.

Iako je online JSON format izvorno oglašavan i smatra se strogim podskupom JavaScripta i ECMAScripta, povremeno dopušta neke znakove koji se ne skrivaju u nizovima koji nisu valjani u JavaScript i ECMAScript nizovima.

Sama JSON postala je međunarodni standard ECMA u 2013. godini kao ECMA-404 standard, koji je korišten u RFC 7158 iste godine kao referenca. U 2014. RFC 7159 postao je glavna referenca za korištenje JSON-a na Internetu (na primjer, MIME aplikacija / json).

Vrste podataka sintaksa i primjer

Glavne vrste JSON podataka su:

  • Broj: Potpisani decimalni broj koji može sadržavati djelomični dio i može koristiti eksponencijalni zapis E, ali ne može uključivati ​​ne-brojeve (na primjer, NaN). Format ne pravi razliku između brojeva i brojeva s pomičnim zarezom. JavaScript koristi format dvostruke preciznosti s pomičnim zarezom za sve svoje brojčane vrijednosti, ali drugi jezici koji implementiraju JSON mogu ih kodirati različito.

primjer json formata

  • String: niz od nula ili velikih unicode znakova. Nizovi su odvojeni dvostrukim navodnicima i sintaksom podrške s obrnutom kosom crtom.
  • Literali: bilo koja od vrijednosti istinita ili lažna.
  • Array: Naredena lista nula ili više vrijednosti, od kojih svaka može biti bilo koje vrste. Nizovi koriste uglate zagrade s zarezima.
  • Objekt: Neuređen skup parova imena / vrijednosti, gdje su nazivi (koji se nazivaju i ključevi) nizovi. Budući da su objekti namijenjeni predstavljanju asocijativnih nizova, preporučuje se (iako nije potrebno) da svaki ključ bude jedinstven unutar njega. Objekti su odvojeni vitičastim zagradama i koriste zareze za razdvajanje svakog para, dok unutar svakog od njih znak dvotočke odvaja ključ ili ime od njegove vrijednosti.
  • Null: Null vrijednost pomoću riječi null.

Ograničeni prostori dopušteni su i mogu se postaviti oko ili između sintaktičkih elemenata (vrijednosti i interpunkcija, ali ne unutar vrijednosti niza). U tu svrhu razmatraju se samo četiri posebna znaka. mjesta: prostor, vodoravna kartica, uvlačenje crte i crta. Konkretno, oznaka bajtnog reda ne bi trebala biti generirana odgovarajućom implementacijom (iako se može usvojiti pri raščlanjivanju JSON). Zahtjev u JSON formatu ne daje sintaksu za komentare.

Rane verzije (na primjer, one navedene u RFC 4627) zahtijevale su da se valjani dokument sastoji samo od objekta ili tipa polja koji može sadržavati druge vrste unutar njih. Takav JSON format, primjer koji se može naći na zastarjelim web-stranicama, trenutno se ne koristi.

upload u json formatu

Problemi s prenosivošću podataka

Iako je Douglas Crockford prvobitno tvrdio da je JSON strogi podskup JavaScripta, njegova specifikacija zapravo omogućuje stvaranje dokumenata koji nisu čitljivi u JavaScriptu. Konkretno, JSON dopušta vrijednosti Unicode U + 2028 LINE SEPARATOR i U + 2029 PARAGRAPH SEPARATOR da se ne prikazuju na navedenim linijama, ali JavaScript ne. To je zbog činjenice da JSON zabranjuje samo "kontrolne znakove". Za maksimalnu kompatibilnost, te znakove treba izbjegavati obrnutom kosom crtom. Ova suptilnost je važna pri izradi JSONP-a.

JSON-format: kako otvoriti?

JSON dokumenti se mogu kodirati u UTF-8, UTF-16 ili UTF-32, zadano kodiranje je UTF-8. Ti standardi podržavaju cijeli skup znakova Unicode, uključujući znakove izvan glavne višejezične ravnine (od U ​​+ 10.000 do U + 10FFFF). Međutim, ako se izbjegnu, ti znakovi moraju biti napisani pomoću UTF-16 surogatnih parova - pojedinosti koje nedostaju nekim analizatorima u JSON formatu. Kako otvoriti i kako će se takva datoteka pročitati?

Brojevi u ovom formatu su agnostički s obzirom na njihovu zastupljenost u programskim jezicima. Nema razlike između cijelog broja i vrijednosti s pomičnim zarezom: neke implementacije mogu tretirati 42, 42.0 i 4.2E + 1 kao isti broj, dok druge ne. Osim toga, ne postoje zahtjevi za pitanja poput prelijevanja, nedostatnosti, gubitka točnosti ili zaokruživanja. Osim toga, JSON format ne govori ništa o obradi potpisanih nula, bez obzira na to je li 0.0 različit od -0.0. Većina implementacija koje koriste IEEE 754 standard s pomičnim zarezom, uključujući JavaScript, zadržavaju potpisane nule, ali to ne mogu učiniti sve JSON implementacije.

zahtjev u json formatu

Koristite u javascriptu

Budući da je JSON format izveden iz JavaScripta i njegova sintaksa je (uglavnom) podskup jezika, možete koristiti funkciju JavaScripteval za analizu JSON podataka. Zbog problema s raščlanjivanjem terminatora Unicode nizova o kojima se raspravljalo u prethodnom odjeljku, funkcija eval mora izvršiti svoju zamjenu.

To nije sigurno ako niz nije ispravno provjeren. Umjesto toga, za čitanje i pisanje JSON, koristite JSON biblioteku parsera ili njegovu podršku za JavaScript.

Ispravno implementiran parser prihvaća samo važeći JSON format, čiji je opis prisutan u sustavu, čime se sprječava nenamjerno izvršavanje potencijalno zlonamjernog koda.

Od 2010. web-preglednici kao što su Firefox i Internet Explorer omogućili su podršku za analizu i učitavanje u JSON format.

Nepodržani izvorni tipovi podataka

JavaScript sintaksa definira nekoliko izvornih tipova podataka koji nisu uključeni u JSON standard: Map, Set, Date, Error, Regular Expression, Function i neke druge. Ove JavaScript vrste podataka moraju biti predstavljene nekim drugim formatima, pri čemu se oba programa slažu s vrstom pretvorbe između vrsta. Danas postoje neki defacto standardi, na primjer, pretvaranje datuma u niz, ali nijedan od njih nije općenito prihvaćen. Drugi jezici mogu imati drugačiji skup izvornih tipova koji moraju biti pažljivo serijski označeni kako bi se mogli nositi s ovom vrstom pretvorbe.

opis formata json

JSON shema

Shema se koristi za definiranje JSON strukture podataka za provjeru, dokumentiranje i upravljanje interakcijom. Ona pruža neku vrstu ugovora za podatke koje zahtijeva aplikacija i način da se ona promijeni.

Shema se temelji na konceptima iz XML sheme (XSD), ali je izvorna. Kao i kod XSD-a, isti alati za serijalizaciju / deserializaciju koriste se i za shemu i za podatke.

Shema je online projekt koji je trenutno u verziji 5 (objavljen 13. listopada 2016.). Postoji nekoliko validatora dostupnih za različite programske jezike, od kojih svaki ima različitu razinu usklađenosti. Ne postoji standardna ekstenzija datoteke, ali neki stručnjaci predlažu odobravanje .schema.json.

MIME tip

Službeni MIME tip za JSON tekst je "application / json". Unatoč činjenici da je većina modernih implementacija usvojila službeni MIME tip, mnoge aplikacije nastavljaju pružati naslijeđenu podršku za druge MIME vrste. Mnogi davatelji usluga, preglednici, poslužitelji, web-aplikacije, knjižnice, okviri i API-ji koriste, očekuju ili prepoznaju MIME tip, čiji sadržaj izgleda kao "text / json" ili "text / javascript". Značajni primjeri uključuju API za Google pretraživanje, Yahoo !, Flickr, Facebook API, DojoToolkit 0.4, i tako dalje.

JSON-RPC

JSON-RPC je protokol udaljenog postupka (RPC) izgrađen na JSON-u, stvoren kao zamjena za XML-RPC ili SOAP. To je jednostavan protokol koji definira samo nekoliko vrsta podataka i naredbi. Omogućuje sustavu slanje obavijesti (informacije na poslužitelj koji ne zahtijeva odgovor) i nekoliko poziva poslužitelju, na koje se može odgovoriti neuredno.

AJAJ

Asinkroni JavaScript i JSON (ili AJAJ) pripadaju istoj dinamičkoj metodologiji kao Ajax, ali umjesto XML-a JSON podaci su glavni format. AJAJ je web razvojna tehnologija koja omogućuje web stranici da traži nove podatke nakon što se učita u preglednik. Obično ih prikazuje s poslužitelja kao odgovor na korisničke radnje na ovoj stranici. Na primjer, ono što korisnik unese u polje za pretraživanje, klijentski kod zatim šalje poslužitelju, koji odmah odgovara s padajućim popisom relevantnih stavki baze podataka.

Pitanja sigurnosti

JSON tekst definira se kao objekt za serijalizaciju podataka. Međutim, njegov dizajn, kao labavo definiran podskup JavaScript skriptnog jezika, postavlja nekoliko sigurnosnih problema. Usredotočeni su na korištenje Javascript interpretera za dinamičko izvršavanje JSON teksta kao ugrađenog JavaScripta. Time se program izlaže pogrešnim ili zlonamjernim skriptama. To je ozbiljan problem pri radu s podacima dobivenim s Interneta.

Ova jednostavna i popularna, ali rizična metoda koristi kompatibilnost s funkcijom JavaScripteval.

Neki programeri pogrešno vjeruju da je JSON tekst sintaktički sličan JavaScript kodu, iako je to samo djelomično točno. Stoga se vjeruje da je jednostavan način za JavaScript program za analizu podataka u ovom formatu korištenje ugrađene funkcije JavaScripteval, koja je dizajnirana za procjenu izraza "Javascript". Umjesto korištenja određenog parsera, sam se interpretator koristi za izvršavanje JSON podataka, kreirajući prirodne JavaScript objekte. Međutim, ova metoda je rizična ako je vjerojatno da JSON podaci mogu sadržavati proizvoljni Javascript kôd, koji će se tada izvršavati na isti način. Ako se ne poduzmu mjere za provjeru podataka, metoda eval ranjiva je na sigurnosne propuste kada podaci i cijelo JavaScript okruženje nisu pod kontrolom jednog pouzdanog izvora.

Na primjer, ako podaci nisu potvrđeni, podliježu zlonamjernim napadima JavaScript koda. Takva kršenja također mogu stvoriti rizik od krađe podataka, prijevare pri provjeri autentičnosti i drugih mogućih zlouporaba podataka i resursa.

Tako je nova JSON.parse funkcija razvijena kao sigurnija alternativa za eval. To je posebno dizajniran za obradu podataka točno JSON, a ne JavaScript. Izvorno je bio predviđen za uključivanje u četvrto izdanje ECMAScript standarda, ali se to nije dogodilo. Prvi put je dodan verziji 5 i sada je podržavaju glavni preglednici.