JSON Format: Primjer i opis: SYL.ru

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

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

Povijest stvaranja

U početku, JSON format je razvio Douglasa Crockforda na početku nule, au budućnosti ga su dva konkurentna standarda (RFC 7159 i ECMA-404) definirala 2013. godine. ECMA standard opisuje samo važeću sintaksu, dok RFC obuhvaća neke osnove sigurnosti i interoperabilnosti. Osim toga, tu je i standardni RFC 7493 koji definira ograničeni profil, poznat kao I-JSON (prečac od "Internet JSON"). On nastoji prevladati neke interakcije. Svaki takav dokument je važeći JSON dokument. Potreba za stvaranjem ovog formata izrasla je iz potrebe za stvarnim komunikacijskim protokolom između poslužitelja i preglednika, koji se provodi u stvarnom vremenu bez upotrebe dodataka (kao što su Flash ili Java apleti).

Razvoj i primjena

Kao što je već spomenuto, Douglas Crockford, kao tvorac StateSoftwarea, najprije je identificirao i popularizirao JSON format. Nakon toga, suosnivači su pristali stvoriti sustav koji koristi standardne mogućnosti preglednika,i pod uvjetom da je razina apstrakcije za programere stvorila aplikacije s kontinuiranim dupleksnim povezivanjem na web poslužitelj. U ovom slučaju, bilo je moguće otvoriti dvije HTTP veze i obraditi ih do standardnog vremena preglednika, ako nisu razmijenjeni podaci. Suosnivači su održali okrugli stol i glasovali za imenovanje JSML ili JSON formata podataka, kao i za određivanje vrste licence za koju će novi dizajn biti dostupan. Format je trenutno otvoren izvor.

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 primjenjivati ​​JSON kanale na svoj GData web protokol tek u prosincu 2006. Izvorno, JSON format datoteke bio je namijenjen za podskup jezika JavaScript skripte (posebno Standard ECMA-262 3. izdanje-prosinac) i obično se koristio s njim. Međutim, ne ovisi o podacima o formatu jezika. Kôd za raščlanjivanje i generiranje JSON podataka dostupan je u mnogim programskim jezicima. Web stranica JSON navodi sve knjižnice. Usprkos činjenici da je online JSON format izvorno oglašavan i smatra se strogim podskupom javascripta i ECMAScripta, povremeno dopušta da se neki znakovi ne skeniraju u retke koji su nedopustivi u javascript i stringovima ECMAScripta.

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

Tipovi podataka, sintaksa i primjer

Glavne vrste JSON podataka su:
  • Broj: decimalni broj s znakom koji može sadržavati djelomični dio i može koristiti eksponent E, ali ne može uključivati ​​ne-brojeve (na primjer, NaN). Format ne pravi razliku između ciljeva i brojeva s pomičnim zarezom. javascript koristi dvostruki format s pomičnim zarezom za sve svoje brojčane vrijednosti, ali drugi JSON-implementirani jezici mogu ih različito kodirati.
  • Linija: Niz nuklearnih ili velikih Unicode znakova. Linije su odvojene znakovima s dvostrukom citiranošću i podržavaju sintaksu s obrnutom crtom.
  • Literali: bilo koja vrijednost istinita ili netočna.
  • Niz: raspoređeni popis s 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 imena (također nazvana ključevi) redovi. Budući da su objekti namijenjeni predstavljanju asocijativnih nizova, preporučuje se (iako ne nužno) da svaki ključ bude jedinstven unutar njega. Objekti su podijeljeni vitičastim zagradama i pomoću zareza razdvajaju svaki par, dok unutar svakog od njih dvotočka čisti ključ ili ime od njegove vrijednosti.
  • Null: Prazna vrijednost, koristeći riječ null. Ograničeni prostori su dopušteni i mogu se prikazati oko ili između sintaktičkih elemenata (značenje i interpunkcija, ali ne unutar vrijednosti niza). U tu svrhu samo četiri posebna znakasmatraju se razmacima: razmak, vodoravna kartica, prijevod retka i izvrtanje. Konkretno, naljepnica bajtnog reda ne bi trebala biti generirana odgovarajućom implementacijom (iako može biti prihvaćena od JSON parsiranja). JSON upit ne daje sintaksu komentara. Rane verzije (kao što su 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. Ovaj JSON format, čiji se primjer može pronaći na zastarjelim web-stranicama, trenutačno nije korišten.

    Problemi s prijenosom podataka

    Unatoč činjenici da je Douglas Crackford prvi tvrdio da je JSON strogi podskup JavaScripta, njegova specifikacija zapravo omogućuje stvaranje dokumenata koji se čitaju u javascriptu. Konkretno, JSON dopušta da vrijednosti Unicode U + 2028 LINE SEPARATOR i U + 2029 PARAGRAPH SEPARATOR linija budu neoklopljene u nizovima s citatima, a javascript ne. To je zbog činjenice da JSON zabranjuje samo "kontrolne znakove". Za maksimalnu kompatibilnost, ti znakovi moraju biti prikazani s obrnutom crtom. Ova suptilnost je važna pri izradi JSONP-a.

    JSON format: što otvoriti?

    JSON dokumenti mogu biti kodirani u UTF-8 UTF-16 ili UTF-32 zadanom kodiranju - UTF-8. Ovi standardi podržavaju puni Unicode skup znakova, uključujući i znakove izvan glavne višejezične ravnine (od U ​​+ 10000 do U + 10FFFF). Analizatori JSON formata: što otvoriti i kako će bitipročitali ovu datoteku? Brojevi u ovom formatu su agnostički u pogledu njihovog prikazivanja u programskim jezicima. Ne postoji razlika između cijelog broja i pomičnog zareza: neke implementacije mogu smatrati 42420 i 4.2 E + 1 kao isti broj, dok druge to ne mogu učiniti. Osim toga, ne postoje zahtjevi za pitanja poput prelijevanja, nedostatnosti, gubitka točnosti ili zaokruživanja. Osim toga, JSON format nema što reći o obradi potpisanih nula, bez obzira na to postoji li 0.0 ili se razlikuje od -0.0. Većina implementacija koje koriste IEEE 754 standard s pomičnim zarezom, uključujući javascript, zadržavaju nule, ali to ne mogu učiniti sve JSON implementacije.

    Korištenje javascripta

    Budući da je JSON format izveden iz javascripta i njegova sintaksa (u osnovi) je podskup jezika, javascripteval se može koristiti za analizu JSON podataka. Zbog problema s unicode razlomcima nizova o kojima se raspravljalo u prethodnom odjeljku, funkcija eval mora izvršiti zamjenu. To je opasno ako string nije ispravno provjeren. Umjesto toga, za čitanje i pisanje JSON-a morate koristiti JSON biblioteku parsera ili njegovu podršku za JavaScript. Ispravno implementiran parser prihvaća samo važeći JSON format, koji je opisan u sustavu, sprečavajući nenamjerno izvršavanje potencijalno štetnog koda. Od 2010. takvi preglednici podržavaju Firefox i Internet Explorer za analizu i istovar u JSON formatu.

    Nepodržani vlastiti tipovi podataka

    Sintaksa javascripta definira nekoliko vlastitih tipova podataka koji nisu uključeni uJSON Standard: mapa, instalacija, datum, pogreška, regularni izraz, funkcija i neke druge. Ti tipovi podataka javascripta moraju biti predstavljeni nekim drugim formatima, pri čemu se oba programa slažu s načinom konverzije među vrstama. Danas postoje neki defacto standardi, primjerice, pretvaranje datuma u niz, ali nijedan od njih nije univerzalno prihvaćen. Drugi jezici mogu imati drugačiji skup vlastitih tipova koji moraju biti pažljivo serijski označeni da bi se mogli nositi s ovom vrstom pretvorbe.

    JSON shema

    Shema se koristi za određivanje strukture JSON podataka za provjeru, dokumentaciju i upravljanje interakcijom. On pruža neku vrstu ugovora za podatke koje zahtijeva aplikacija i način na koji se ona mijenja. Shema se temelji na konceptima iz XML sheme (XSD), ali je vlastita. 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čite razine usklađenosti. Nema standardnih ekstenzija datoteka, ali neki stručnjaci predlažu odobrenje .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 tipove. Mnogi davatelji usluga, preglednici, poslužitelji, web-aplikacije, knjižnice, okviri i API-ji upotrebljavaju, čekaju ili prepoznaju vrstu MIME čiji sadržaj izgleda"Tekst /json" ili "tekst /javascript". Poznati 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 poziva za procedure (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 poruka (informacije poslužitelju koje ne zahtijevaju odgovor) i nekoliko poziva poslužitelju, na koje se bez odgovora može odgovoriti.

    AJAJ

    Asinkroni javascript i JSON (ili AJAJ) odnose se na istu dinamičku metodologiju web stranica kao Ajax, ali umjesto XML-a, bitan je točan JSON format podataka. AJAJ je web razvojna tehnologija koja omogućuje web stranici da traži nove podatke nakon preuzimanja u preglednik. Obično ih prikazuje s poslužitelja kao odgovor na korisničke akcije na ovoj stranici. Na primjer, ono što korisnik unese u okvir za pretraživanje, klijentski kod zatim šalje poslužitelju, što odmah odgovara padajućem popisu relevantnih elemenata baze podataka.

    Sigurnosna pitanja

    Tekst u JSON formatu definira se kao objekt serijalizacije podataka. Međutim, njegov dizajn, kao ne-zbunjujući podskup jezika JavaScript skripte, stvara 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 šalje lažne ili zlonamjerne skripte. To je ozbiljan problem pri radu s podacima izvađenim s Interneta. Ova jednostavna i popularna, ali rizična metoda koristi kompatibilnost funkcionalnostijavascripteval. Neki programeri pogrešno vjeruju da je JSON tekst također sintaktički sličan javascriptu, iako je to samo djelomično točno. Stoga se vjeruje da je jednostavan način za JavaScript program za analizu podataka u formatu da koristi ugrađenu javascripteval funkciju, koja je razvijena za procjenu izraza "javascript". Umjesto korištenja određenog parsera, sam se interpretator koristi za izvršavanje JSON podataka stvaranjem prirodnih javascript objekata. 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šiti na isti način. Ako se ne poduzmu mjere za provjeru podataka, metoda eval je podložna sigurnosnim ranjivostima, kada podaci i cjelokupno javascript okruženje nisu pod kontrolom jednog pouzdanog izvora. Na primjer, ako podaci nisu potvrđeni, napadaju ih zlonamjerni JavaScript kod. Takva kršenja također mogu predstavljati opasnost od krađe podataka, lažne provjere autentičnosti i drugih potencijalnih zlouporaba podataka i resursa. Tako je nova JSON.parse funkcija razvijena kao sigurnija alternativa za eval. To je posebno dizajniran za obradu podataka naime JSON, ne javascript. U početku je trebalo biti uključeno u četvrto izdanje ECMAScript standarda, ali se to nije dogodilo. Prvi put je dodan petoj verziji i sada ga podržavaju glavni preglednici.
  • Povezane publikacije