Format JSON: primer in opis

20. 2. 2019

JSON je okrajšava od Java skript Object Notation, ki je oblika, za katero se uporablja berljivo besedilo prenos podatkov sestavljeni iz para atribut-vrednost. To je najpogostejši format podatkov, ki se uporablja za asinhrono komunikacijo med brskalnikom in strežnikom, ki v veliki meri nadomešča XML (z uporabo AJAX-a).

json format

JSON je jezikovno neodvisen format podatkov, ki je bil izpeljan iz JavaScripta. Od leta 2017 je veliko programskih jezikov uporabljalo kodo za izdelavo in analizo podatkov v njej. Imena datotek JSON uporabljajo razširitev .json.

Zgodovina ustvarjanja

Prvotni JSON format je razvil Douglas Crockford na začetku ničle, nato pa sta ga leta 2013 opredelila dva konkurenčna standarda (RFC 7159 in ECMA-404). Standard ECMA opisuje le veljavno skladnjo, medtem ko RFC zajema nekatere osnove varnosti in interoperabilnosti.

Poleg tega je standard RFC 7493, ki opredeljuje omejen profil, znan kot I-JSON (okrajšava za „Internet JSON“). Prizadeva si premagati nekatere probleme interakcije. Vsak tak dokument je veljaven dokument JSON.

Potreba po oblikovanju te oblike je izrasla iz potrebe po resničnem protokolu komunikacije med strežnikom in brskalnikom, ki se izvaja v realnem času brez uporabe vtičnikov (kot so Flash ali Java programčki).

json format kot odprt

Razvoj in uporaba

Kot smo že omenili, je Douglas Crockford, ki je ustvarjalec programa StateSoftware, najprej opredelil in populariziral JSON format. Nato so se soustanovitelji strinjali, da bodo ustvarili sistem s standardnimi zmogljivostmi brskalnika in zagotovili abstrakcijski sloj za razvijalce, ki bodo ustvarjali aplikacije z neprekinjeno dvostransko povezavo s spletnim strežnikom. Hkrati je postalo možno, da sta odprta dva HTTP-povezava in ju obdelali do standardnega brskalnika, če ni bilo izmenjanih podatkov. Soustanovitelji so razpravljali na okrogli mizi in glasovali za imenovanje podatkovnega formata JSML ali JSON ter določili vrsto licence, pod katero bo nov razvoj na voljo. Trenutno je oblika odprte kode.

json format na spletu

Praktična uporaba

Spletna stran JSON.org se je začela leta 2002. Decembra 2005 je Yahoo! začela ponuditi nekatere svoje spletne storitve v tej obliki. Google je začel uporabljati vire JSON za svoj spletni protokol GData šele decembra 2006.

Prvotno datoteke JSON je bil namenjen za podskupino skriptnega jezika JavaScript (zlasti Standard ECMA-262 3. izdaja-december) in se je z njim pogosto uporabljal. Vendar pa je format neodvisen od podatkovnega jezika. Koda za razčlenjevanje in generiranje podatkov JSON je na voljo v številnih programskih jezikih. Na spletnem mestu JSON so navedene vse knjižnice.

Čeprav je bila spletna oblika JSON prvotno oglaševana in je veljala za strogo podmnožico JavaScripta in ECMAScripta, občasno dovoljuje nekatere znake, ki niso izločeni v nizih, ki niso veljavni v nizih JavaScript in ECMAScript.

JSON je postal mednarodni standard ECMA leta 2013 kot standard ECMA-404, ki je bil v RFC 7158 uporabljen istega leta kot referenca. Leta 2014 je RFC 7159 postal glavni sklic na uporabo JSON na internetu (npr. Aplikacija MIME / json).

Vrste podatkov sintaksa in primer

Glavne vrste podatkov JSON so:

  • Number: Podpisana decimalna številka, ki lahko vsebuje delni del in lahko uporabi eksponentno oznako E, ne more pa vključevati številk (npr. NaN). Oblika ne razlikuje med celimi števili in števili s plavajočo vejico. Za vse številske vrednosti JavaScript uporablja format z dvojno natančnostjo s plavajočo vejico, vendar jih lahko drugi jeziki, ki izvajajo JSON, različno kodirajo.

primer formata json

  • Niz: zaporedje znakov nukle ali velikih unicode. Strune so ločene z dvojnimi narekovaji in podpirajo sintakso s poševnico.
  • Literali: katera koli izmed vrednosti je resnična ali neresnična.
  • Array: urejen seznam ničelnih ali več vrednosti, od katerih je lahko vsaka vrsta. Polja uporabljajo kvadratne oklepaje z vejicami.
  • Objekt: Neurejen nabor parov ime / vrednost, kjer so imena (imenovana tudi ključi) nizi. Ker so objekti namenjeni predstavljanju asociativnih nizov, je priporočljivo (čeprav ni potrebno), da je vsak ključ edinstven znotraj njega. Objekti so ločeni z zavitimi oklepaji in z vejicami ločijo vsak par, znotraj vsakega od njih pa loči ključ ali ime od njegove vrednosti.
  • Null: ničelna vrednost z besedo null.

Omejeni prostori so dovoljeni in se lahko postavljajo okrog ali med skladenjskimi elementi (vrednosti in ločila, vendar ne znotraj vrednosti niza). V ta namen se upoštevajo samo štirje posebni znaki. prostori: prostor, vodoravni zavihek, podajanje vrstice in poševnica. Natančneje, oznaka bajtnega reda ne sme biti ustvarjena z ustrezno izvedbo (čeprav jo je mogoče sprejeti pri razčlenjevanju JSON). Zahteva v obliki JSON ne vsebuje sintakse za komentarje.

Zgodnje različice (na primer tiste, navedene v RFC 4627) so zahtevale, da velja veljavni dokument samo za objekt ali vrsto polja, ki lahko vsebuje druge vrste znotraj njih. Takšen format JSON, katerega primer je mogoče najti na zastarelih spletnih straneh, se trenutno ne uporablja.

naložite v formatu json

Težave s prenosljivostjo podatkov

Čeprav je Douglas Crockford prvotno trdil, da je JSON stroga podskupina JavaScripta, njegova specifikacija dejansko omogoča izdelavo dokumentov, ki jih ni mogoče brati v JavaScriptu. Zlasti JSON dovoljuje vrednosti Unicode U + 2028 LINE SEPARATOR in U + 2029 PARAGRAPH SEPARATOR, da se na navedenih linijah pojavijo nezaščitene, vendar JavaScript ne. To je posledica dejstva, da JSON prepoveduje samo "kontrolne znake". Za največjo združljivost je treba te znake ubežati s poševnico nazaj. Ta subtilnost je pomembna pri ustvarjanju JSONP.

Format JSON: kako odpreti?

Dokumenti JSON se lahko kodirajo v UTF-8, UTF-16 ali UTF-32, privzeto kodiranje je UTF-8. Ti standardi podpirajo celoten nabor znakov Unicode, vključno z znaki zunaj glavne večjezične ravnine (od U ​​+ 10.000 do U + 10FFFF). Vendar pa morajo biti ti znaki napisani z uporabo nadomestnih parov UTF-16 - podrobnosti manjkajo nekateri analizatorji v formatu JSON. Kako odpreti in kako se bo taka datoteka prebrala?

Številke v tej obliki so agnostične glede na njihovo predstavitev v programskih jezikih. Med celim številom in vrednostjo s plavajočo vejico ni razlike: nekatere izvedbe lahko obravnavajo 42, 42.0 in 4.2E + 1 kot isto številko, druge pa ne. Poleg tega ni nobenih zahtev za vprašanja, kot so prelivanje, nezadostnost, izguba natančnosti ali zaokroževanje. Poleg tega format JSON ne pove ničesar o obdelavi podpisanih ničel, ne glede na to, ali se 0,0 razlikuje od -0,0. Večina izvedb, ki uporabljajo standard IEEE 754 s plavajočo vejico, vključno z JavaScriptom, ohranijo podpisane ničle, vendar pa ne morejo vse implementacije JSON.

zahtevo v formatu json

Uporabite v javascript

Ker je format JSON izpeljan iz JavaScripta, njegova skladnja pa je (večinoma) podniz jezika, lahko za analizo podatkov JSON uporabite funkcijo JavaScripteval. Zaradi težave pri razčlenjevanju terminatorjev nizov Unicode, obravnavanih v prejšnjem razdelku, mora funkcija eval opraviti zamenjavo.

To ni varno, če niz ni pravilno potrjen. Namesto tega lahko za branje in pisanje JSON uporabite knjižnico razčlenjevalnika JSON ali podporo za JavaScript.

Pravilno izveden razčlenjevalnik sprejema samo veljavni format JSON, katerega opis je prisoten v sistemu, kar preprečuje nenamerno izvajanje potencialno zlonamerne kode.

Od leta 2010 so spletni brskalniki, kot sta Firefox in Internet Explorer, omogočili podporo za analizo in nalaganje v format JSON.

Nepodprti izvorni tipi podatkov

JavaScript sintaksa določa več izvornih tipov podatkov, ki niso vključeni v standard JSON: zemljevid, nastavitev, datum, napaka, regularni izraz, funkcija in nekatere druge. Te vrste podatkov JavaScript morajo predstavljati nekatere druge oblike, pri čemer se oba programa dogovorita o vrsti pretvorbe med vrstami. Danes obstajajo nekateri defacto standardi, na primer pretvorba datuma v niz, vendar nobena od njih ni splošno sprejeta. Drugi jeziki imajo lahko drugačen niz avtohtonih tipov, ki jih je treba skrbno zaporedno razvrščati, da bi lahko obravnavali to vrsto pretvorbe.

opis formata json

Shema JSON

Shema se uporablja za definiranje podatkovne strukture JSON za preverjanje, dokumentiranje in upravljanje interakcije. Zagotavlja vrsto pogodbe za podatke, ki jih zahteva aplikacija, in način, kako jo spremeniti.

Shema temelji na konceptih iz sheme XML (XSD), vendar je domača. Enako kot pri XSD se za shemo in podatke uporabljajo ista orodja za serializacijo / deserializacijo.

Shema je spletni projekt, ki je trenutno v različici 5 (izdan 13. oktobra 2016). Na voljo je več validatorjev za različne programske jezike, od katerih ima vsaka različno raven skladnosti. Standardne razširitve datotek ni, vendar nekateri strokovnjaki predlagajo odobritev .schema.json.

Vrsta MIME

Uradni tip MIME za besedilo JSON je »application / json«. Kljub dejstvu, da je večina sodobnih izvedb sprejela uradni tip MIME, številne aplikacije še naprej zagotavljajo podedovano podporo za druge vrste MIME. Številni ponudniki storitev, brskalniki, strežniki, spletne aplikacije, knjižnice, okviri in API-ji uporabljajo, pričakujejo ali prepoznajo vrsto MIME, katere vsebina je videti kot besedilo / json ali besedilo / javascript. Med pomembnimi primeri so Google Search API, Yahoo !, Flickr, Facebook API, DojoToolkit 0.4 in tako naprej.

JSON-RPC

JSON-RPC je protokol klic oddaljenega postopka (RPC) zgrajen na JSON, ustvarjen kot nadomestek za XML-RPC ali SOAP. To je preprost protokol, ki definira le nekaj vrst podatkov in ukazov. Sistemu omogoča pošiljanje obvestil (informacije na strežnik, ki ne zahteva odgovora) in več klicev na strežnik, na katere je mogoče odgovoriti neurejeno.

AJAJ

Asinhroni JavaScript in JSON (ali AJAJ) spadata v isto dinamično spletno stran kot metodo Ajax, toda namesto XML sta JSON podatki glavni format. AJAJ je spletna razvojna tehnologija, ki omogoča, da spletna stran po vstavitvi v brskalnik zahteva nove podatke. Ponavadi jih prikaže iz strežnika kot odziv na dejanja uporabnika na tej strani. Na primer, kaj uporabnik vnese v iskalno polje, koda odjemalca nato pošlje strežniku, ki se takoj odzove s spustnim seznamom ustreznih postavk baze podatkov.

Varnostna vprašanja

Besedilo JSON je definirano kot objekt podatkovne seriozacije. Vendar pa njegova zasnova, kot ohlapno opredeljena podskupina skriptnega jezika JavaScript, povzroča več varnostnih težav. Osredotočajo se na uporabo interpretatorja Javascript za dinamično izvajanje besedila JSON kot vgrajeni JavaScript. To izpostavlja program napačnim ali zlonamernim skriptom. To je resen problem pri delu s podatki, pridobljenimi iz interneta.

Ta preprosta in priljubljena, vendar tvegana metoda uporablja združljivost s funkcijo JavaScripteval.

Nekateri razvijalci pomotoma menijo, da je besedilo JSON tudi sintaktično podobno JavaScript kodi, čeprav je to le delno res. Zato verjamemo, da je preprost način za program JavaScript za analizo podatkov v tej obliki uporaba vgrajene funkcije JavaScripteval, ki je bila zasnovana za ocenjevanje izrazov "Javascript". Interpreter se torej ne uporablja določenega razčlenjevalnika, zato se uporablja za izvajanje podatkov JSON, ustvarjanje naravnih objektov JavaScript. Vendar pa je ta metoda tvegano, če je verjetno, da lahko podatki JSON vsebujejo poljubno kodo Javascript, ki bo nato izvedena na enak način. Razen če so ukrepi prvič sprejeti za preverjanje podatkov, je metoda eval ranljiva za varnostne ranljivosti, ko podatki in celotno okolje JavaScripta niso pod nadzorom enega zaupnega vira.

Če na primer podatki niso preverjeni, so predmet zlonamernih napadov kode JavaScript. Takšne kršitve lahko povzročijo tudi tveganje kraje podatkov, goljufij pri preverjanju pristnosti in drugih možnih zlorab podatkov in virov.

Tako je bila nova funkcija JSON.parse razvita kot varnejša alternativa eval. To je posebej zasnovano za obdelavo podatkov natančno JSON, in ne JavaScript. Prvotno je bil predviden za vključitev v četrto izdajo standarda ECMAScript, vendar se to ni zgodilo. Najprej je bila dodana različici 5 in jo zdaj podpirajo glavni brskalniki.