JSON: osnovna upotreba. JSON format: što je to, kako stvoriti i otvoriti datoteku Stvaranje json datoteke

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

JSON (JavaScript Object Notation) je format za prijenos podataka. Kao što naziv govori, format se temelji na programskom jeziku JavaScript, ali je dostupan i na drugim jezicima (Python, Ruby, PHP, Java).

JSON koristi ekstenziju .json. Prilikom korištenja u dr formati datoteka(npr. .html) JSON niz je citiran ili dodijeljen varijabli. Ovaj se format lako prenosi između web poslužitelja i klijenta ili preglednika.

Lagan i jednostavan za razumijevanje, JSON je izvrsna alternativa XML-u.

Ovaj vodič će vas upoznati s prednostima, objektima, općom strukturom i sintaksom JSON-a.

JSON sintaksa i struktura

JSON objekt je u obliku ključ-vrijednost i obično se piše u vitičastim zagradama. Kada radite s JSON-om, svi objekti pohranjuju se u .json datoteku, ali mogu postojati i kao zasebni objekti u kontekstu programa.

JSON objekt izgleda ovako:

"ime" : "Ivan",
"prezime" : "Smith",
"lokacija" : "London",
"na mreži" : istina,
"sljedbenici" : 987

Ovo je vrlo jednostavan primjer. JSON objekt može sadržavati mnogo redaka.

Kao što vidite, objekt se sastoji od parova ključ-vrijednost koji su zatvoreni u vitičaste zagrade. Većina podataka u JSON-u napisana je kao objekti.

Između ključa i vrijednosti stavlja se dvotočka. Nakon svakog para potrebno je staviti zarez. Rezultat je:

"ključ" : "vrijednost", "ključ" : "vrijednost", "ključ" : "vrijednost"

JSON ključ je s lijeve strane. Ključ mora biti stavljen u dvostruke navodnike. Bilo koji važeći niz može se koristiti kao ključ. Unutar jednog objekta svi ključevi moraju biti jedinstveni. Ključ može sadržavati razmak ("ime"), ali programiranje može imati problema s pristupom takvom ključu. Stoga je umjesto razmaka bolje koristiti podvlaku (“ime”).

JSON vrijednosti nalaze se na desnoj strani stupca. Bilo koja jednostavna vrsta podataka može se koristiti kao vrijednost:

  • Žice
  • Brojke
  • Predmeti
  • Nizovi
  • Booleovi podaci (točno ili netočno)

Vrijednosti također mogu biti predstavljene složenim tipovima podataka (na primjer, objekti ili JSON polja).

JSON podržava individualnu sintaksu za svaku od gore navedenih vrsta podataka: ako je vrijednost predstavljena nizom, bit će stavljena u navodnike, ali ako je broj, neće.

Obično se podaci u .json datotekama pišu u stupcu, ali JSON se može pisati i u retku:

( "first_name" : "John", "last_name" : "Smith", "online" : true, )

Ovo je način na koji se JSON podaci obično zapisuju u druge vrste datoteka.

Zapisivanjem JSON podataka u stupac poboljšavate čitljivost datoteke (osobito ako u datoteci ima puno podataka). JSON zanemaruje razmake između stupaca, tako da ih možete koristiti za podjelu podataka u upravljiv broj stupaca.

"ime" : "Ivan",
"prezime" : "Smith",
"online" : istina

Imajte na umu: JSON objekti vrlo su slični JavaScript objekti, ali nisu istog formata. Na primjer, možete koristiti funkcije u JavaScriptu, ali ne i u JSON-u.

Glavna prednost JSON-a je to što podatke u ovom formatu podržavaju mnogi popularni programski jezici, pa se mogu brzo prenijeti.

Sada ste upoznati s osnovna sintaksa JSON. Ali JSON datoteke mogu imati složene, hijerarhijske strukture koje uključuju ugniježđene nizove i objekte.

Složeni tipovi u JSON-u

JSON može pohraniti ugniježđene objekte i nizove, koji će biti proslijeđeni kao vrijednost ključa koji im je dodijeljen.

Ugniježđeni objekti

Ispod ćete pronaći primjer - datoteku users.json koja sadrži korisničke podatke. Za svakog korisnika

(“john”, “jesse”, “drew”, “jamie”) ugniježđeni objekt se prosljeđuje kao vrijednost, koja se također sastoji od ključeva i vrijednosti.

Napomena: prvi ugniježđeni JSON objekt označen je crvenom bojom.

"Ivan" :(
"korisničko ime": "Ivan",
"lokacija" : "London",
"na mreži" : istina,
"sljedbenici" : 987

"jesse" :(
"korisničko ime": "Jesse",
"lokacija" : "Washington",
"na mreži" : lažno,
"sljedbenici" : 432

"nacrtati" :(
"korisničko ime": "Drew",
"lokacija": "Pariz",
"na mreži" : lažno,
"sljedbenici" : 321

"jamie" :(
"korisničko ime": "Jamie",
"lokacija": "Berlin",
"na mreži" : istina,
"sljedbenici" : 654

Imajte na umu da se vitičaste zagrade koriste iu ugniježđenom objektu i u glavnom objektu. Zarezi u ugniježđenim objektima koriste se na isti način kao i u običnim.

Ugniježđeni nizovi

Podaci se mogu zatvoriti u JSON pomoću JavaScript nizovi, koji će se proslijediti kao vrijednosti. U JavaScriptu se koriste početak i kraj niza uglate zagrade(). Niz je uređena zbirka podataka koja može sadržavati različite vrste podataka.

Niz se koristi za prijenos velike količine podataka koji se mogu grupirati. Na primjer, pokušajmo zabilježiti korisničke podatke.

{
"ime" : "Ivan",
"prezime" : "Smith",
"lokacija" : "London",
"web stranice" : [

"opis" : "posao",
"URL" : "https://www.johnsmithsite.com/"

},
{

"desciption" : "tutorijali",
"URL" : "https://www.johnsmithsite.com/tutorials"

"društveni mediji" : [

"opis": "twitter",
"link" : "https://twitter.com/johnsmith"

"opis": "facebook",
"link" : "https://www.facebook.com/johnsmith"

"opis": "github",
"link" : "https://github.com/johnsmith"

Ključevima “web stranice” i “social_media” dodijeljeni su nizovi kao vrijednosti koje su smještene u uglate zagrade.

Koristeći ugniježđene nizove i objekte, možete stvoriti složenu hijerarhiju podataka.

JSON ili XML?

XML (eXtensible Markup Language) omogućuje pohranjivanje podataka u obliku koji je lako razumljiv ljudima i strojevima. XML format podržava velik broj programskih jezika.

XML i JSON imaju mnogo toga zajedničkog. Međutim, XML zahtijeva mnogo više teksta, što znači da su takve datoteke veće i teže ih je čitati i pisati. Štoviše, XML se obrađuje samo pomoću XML interpretera, dok se JSON može obraditi pomoću jednostavne funkcije. Za razliku od JSON-a, XML ne može pohranjivati ​​nizove.

Usporedimo dvije datoteke: one sadrže iste podatke, ali je prva napisana u XML formatu, a druga u JSON formatu.

korisnici.xml

John London

Jesse Washington

Drew Paris

Jamie Berlin

korisnici.json
("korisnici": [

("korisničko ime": "John", "lokacija": "London"),
("korisničko ime": "Jesse", "lokacija": "Washington"),
("korisničko ime": "Drew", "lokacija": "Pariz"),
("korisničko ime": "JamieMantisShrimp", "lokacija": "Berlin")

JSON je vrlo kompaktan format i ne zahtijeva toliko oznaka kao XML. Uz to, XML, za razliku od JSON-a, ne podržava nizove.

Ako ste upoznati s HTML-om, primijetili ste to XML format vrlo sličan njemu (osobito oznake). JSON je jednostavniji, zahtijeva manje teksta i lakši je za korištenje u AJAX aplikacijama, na primjer.

Naravno, format se mora odabrati ovisno o potrebama aplikacije.

Alati za JSON

JSON se obično koristi u JavaScriptu, ali se format široko koristi u drugim programskim jezicima.

Više informacija o JSON kompatibilnosti i obradi možete pronaći na web stranici projekta i jQuery biblioteci.

Rijetko je napisati JSON od nule. Podaci se obično učitavaju iz izvora ili pretvaraju u JSON. Možete pretvoriti CSV ili podatke razdvojene tabulatorima u JSON pomoću alata otvorenog koda Mr. Pretvarač podataka. Za pretvaranje XML-a u JSON i obrnuto koristite utilities-online.info. Kada radite s automatskim alatima, svakako provjerite rezultate.

JSON datoteke (uključujući konvertirane podatke) mogu se pregledati pomoću usluge JSONLint. Za testiranje JSON-a u kontekstu web razvoja, pogledajte JSFiddle.

Zaključak

JSON je jednostavan i lagan format podataka. JSON datoteke lako je prenijeti, pohraniti i koristiti.

Danas se JSON često koristi u API-jima.

Obavijest

Format datoteke JSON web stranice

JSON datoteke koriste se za pohranjivanje struktura jednostavnih skupova podataka u tekstualnom formatu čitljivom za čovjeka. JSON datoteke izvorno su bile blisko povezane s programskim jezikom JavaScript, ali zbog činjenice da ovaj trenutak Ovaj format podržava velik broj softverskih API-ja; može se smatrati formatom koji nije vezan ni za jedan programski jezik. Ovu alternativu XML formatu najčešće koriste Ajax web aplikacije.

Tehničke informacije o JSON datotekama

JSON datoteke koriste se kao datoteke za razmjenu podataka. Ova se razmjena često događa između računala povezanih putem interneta. Stoga je vrlo rijetko da se datoteke s ekstenzijom JSON spremaju na tvrdi disk računala. Međutim, neke aplikacije još uvijek koriste ovaj format. Na primjer, podaci Google profil+ spremaju se i učitavaju u JSON formatu i web pregledniku Mozilla Firefox koristi datoteke ovog formata za pohranu sigurnosne kopije Oznake

dodatne informacije o JSON formatu

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.

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.

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".

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.

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.

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.

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.

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.

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.

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.

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.

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...).

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.

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.

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.

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)
    Ekstenzija datoteke .json
    Kategorija datoteke
    Primjer datoteke (0,57 KiB)
    Povezani programi Microsoft Notepad
    Microsoft WordPad
    Notepad++
    Mozilla Firefox
    Jezici za označavanje dokumenataUredski dokumenti

    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.


    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.


    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.


    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.


    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.


    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.



    reci prijateljima
    Pročitajte također