Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • vijesti
  • Šta je JSON? JSON format: primjer i opis.

Šta je JSON? JSON format: primjer i opis.

Parovi atribut-vrijednost. To je najčešći format podataka koji se koristi za asinkronu komunikaciju između pretraživača i servera, koji u velikoj mjeri zamjenjuje XML (koji koristi AJAX).

JSON je format podataka nezavisan od jezika koji je izveden iz JavaScripta. Od 2017. mnogi programski jezici koriste kod za generiranje i analizu podataka samo u njemu. Nazivi JSON datoteka koriste ekstenziju .json.

Istorija stvaranja

JSON format je prvobitno razvio Douglas Crockford početkom 2000-ih, a potom su ga dva konkurentska standarda (RFC 7159 i ECMA-404) definirala 2013. godine. ECMA standard opisuje samo važeću sintaksu, dok RFC pokriva neke od osnova sigurnosti i interoperabilnosti.

Osim toga, postoji RFC 7493, koji definira ograničeni profil poznat kao I-JSON (skraćeno od Internet JSON). On nastoji da prevaziđe neke probleme u komunikaciji. Svaki takav dokument je važeći JSON dokument.

Potreba za kreiranjem ovog formata nastala je iz potrebe za pravim komunikacijskim protokolom između servera i pretraživača, koji se izvodi u realnom vremenu bez upotrebe dodataka (kao što su Flash ili Java apleti).

Razvoj i primjena

Kao što je navedeno, Douglas Crockford, tvorac StateSoftware-a, pionir je i popularizirao JSON format. Nakon toga, suosnivači su se složili da izgrade sistem koristeći standardne mogućnosti pretraživača i obezbedili sloj apstrakcije za programere da kreiraju aplikacije sa kontinuiranom, dupleks vezom na veb server. Istovremeno, postalo je moguće držati dvije HTTP veze otvorene i obraditi ih do standardnog vremena rada pretraživača, ako nije izvršena razmjena podataka. Suosnivači su održali okrugli sto i glasali za naziv formata podataka JSML ili JSON, te odredili vrstu licence pod kojom će novi razvoj biti dostupan. Format je trenutno otvorenog koda.

Praktična upotreba

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

JSON format datoteke je prvobitno bio namijenjen za podskup JavaScript skriptnog jezika (posebno Standard ECMA-262 3. izdanje-decembar) i često se koristio s njim. Međutim, ovo je format nezavisan od jezika podataka. Kod za raščlanjivanje i generisanje JSON podataka dostupan je na mnogim programskim jezicima. JSON web stranica navodi sve biblioteke.

Iako je format JSON na mreži prvobitno bio reklamiran i smatran strogim podskupom JavaScript-a i ECMAScript-a, on povremeno dozvoljava neke znakove koji nisu prebačeni u nizove koji su nevažeći u stringovima JavaScripta i ECMAScript-a.

Sam JSON je postao međunarodni ECMA standard 2013. kao ECMA-404, koji je korišten kao referenca u RFC 7158 iste godine. Godine 2014, RFC 7159 je postao primarna referenca za korištenje JSON-a na webu (npr. MIME aplikacija / json).

Tipovi podataka, sintaksa i primjer

Glavni JSON tipovi podataka su:

  • Broj: Predpisani decimalni broj koji može sadržavati razlomak i može koristiti eksponencijalnu notaciju E, ali ne može uključivati ​​ne-brojeve (kao što je NaN). Format ne pravi razliku između cijelih brojeva i brojeva s pomičnim zarezom. JavaScript koristi format s pomičnim zarezom dvostruke preciznosti za sve svoje numeričke vrijednosti, ali drugi jezici koji implementiraju JSON mogu ih kodirati drugačije.

  • String: Niz nula ili velikih Unicode znakova. Nizovi su razgraničeni dvostrukim navodnicima i podržavaju sintaksu obrnute kose crte.
  • Literali: Bilo koji od tačnih ili lažnih.
  • Niz: uređena lista od nula ili više vrijednosti, od kojih svaka može biti bilo kojeg tipa. Nizovi koriste uglaste zagrade sa zarezima.
  • Objekt: Neuređena kolekcija parova ime/vrijednost, gdje su imena (koja se također nazivaju ključevima) nizovi. Pošto su objekti dizajnirani da predstavljaju asocijativne nizove, preporučuje se (iako nije obavezno) da svaki ključ bude jedinstven unutar njega. Objekti su odvojeni vitičastim zagradama i koriste se zarezi za odvajanje svakog para, dok unutar svakog od njih znak dvotačke odvaja ključ ili ime od njegove vrijednosti.
  • Null: prazna vrijednost koja koristi riječ null.

Ograničeni razmaci su dozvoljeni i mogu se postaviti oko ili između sintaksičkih elemenata (značenje i interpunkcija, ali ne unutar vrijednosti niza). U tu svrhu, samo četiri specijalna znaka se računaju kao razmaci: razmak, horizontalni tabulator, pomak reda i kosa crta. Konkretno, oznaka reda bajtova ne mora biti generisana odgovarajućom implementacijom (iako se može prihvatiti prilikom raščlanjivanja JSON-a). JSON zahtjev ne daje sintaksu za komentare.

Ranije verzije (kao što su one navedene u RFC 4627) zahtijevale su da se važeći dokument sastoji samo od tipa objekta ili niza, koji bi mogao sadržavati druge tipove u sebi. Ovaj JSON format, čiji se primjer može naći na starim web stranicama, trenutno se ne koristi.

Problemi prenosivosti podataka

Iako je Douglas Crockford prvobitno tvrdio da je JSON strogi podskup JavaScripta, njegova specifikacija zapravo omogućava kreiranje dokumenata koji su nečitljivi u JavaScriptu. Konkretno, JSON dozvoljava da se vrijednosti niza u Unicodeu U + 2028 LINE SEPARATOR i U + 2029 PARASE SEPARATOR pojavljuju bez preklapanja u navodnicima, ali JavaScript ne. To je zato što JSON zabranjuje samo "kontrolne znakove". Za maksimalnu kompatibilnost, ovi znakovi bi trebali biti prikazani obrnutom kosom crtom. Ova suptilnost je važna kada kreirate JSONP.

JSON format: kako ga otvoriti?

JSON dokumenti mogu biti kodirani u UTF-8, UTF-16 ili UTF-32, podrazumevano kodiranje je UTF-8. Ovi standardi podržavaju cijeli skup "Unicode" znakova, uključujući znakove izvan glavne višejezične ravni (U + 10000 do U + 10FFFF). Međutim, ako se izađu, ovi znakovi moraju biti napisani korištenjem UTF-16 surogat parova - detalj koji propuštaju neki JSON parseri. Kako otvoriti i kako će se takav fajl čitati?

Brojevi u ovom formatu su agnostički u pogledu njihovog predstavljanja u programskim jezicima. Ne postoji razlika između vrijednosti cijelog broja i vrijednosti s pomičnim zarezom: neke implementacije mogu tretirati 42, 42.0 i 4.2E + 1 kao isti broj, dok druge možda ne. Osim toga, ne postoje zahtjevi za probleme kao što su prelivanje, niži protok, gubitak preciznosti ili zaokruživanje. Takođe, JSON format ne govori ništa o rukovanju potpisanim nulama, bez obzira da li je 0.0 drugačije od -0.0. Većina implementacija koje koriste standard IEEE 754 s pomičnim zarezom, uključujući JavaScript, pohranjuju nule s potpisom, ali ne mogu sve implementacije JSON-a.

Upotreba u JavaScript-u

Budući da je JSON format izveden iz JavaScripta i da je njegova sintaksa (uglavnom) podskup jezika, možete koristiti JavaScripteval funkciju za raščlanjivanje JSON podataka. Zbog problema s raščlanjivanjem Unicode terminatora niza o kojem se raspravljalo u prethodnom odjeljku, funkcija eval ih mora zamijeniti.

Nije sigurno ako string nije ispravno potvrđen. Umjesto toga, trebali biste koristiti JSON biblioteku parsera ili JavaScript podršku za čitanje i pisanje JSON-a.

Pravilno implementirani parser prihvata samo važeći JSON format, kako je opisano u sistemu, sprečavajući nenamjerno izvršavanje potencijalno zlonamjernog koda.

Od 2010. godine, web pretraživači kao što su Firefox i Internet Explorer su omogućeni za raščlanjivanje i izvoz u JSON format.

Nepodržani izvorni tipovi podataka

JavaScript sintaksa definira nekoliko izvornih tipova podataka koji nisu uključeni u JSON standard: mapa, set, datum, greška, regularni izraz, funkcija i nekoliko drugih. Ovi JavaScript tipovi podataka moraju biti predstavljeni u nekom drugom formatu, s tim da se oba programa slažu o načinu konverzije između tipova. Danas postoje neki defacto standardi, kao što je pretvaranje datuma u niz, ali nijedan od njih nije općenito prihvaćen. Drugi jezici mogu imati drugačiji skup izvornih tipova koji se moraju pažljivo serijalizirati da bi se nosili s ovom vrstom konverzije.

JSON šema

Šema se koristi za definiranje JSON strukture podataka za validaciju, dokumentaciju i upravljanje interakcijom. On obezbjeđuje neku vrstu ugovora za podatke koje zahtijeva aplikacija i način za njihovu promjenu.

Shema je zasnovana na konceptima iz XML Schema (XSD), ali je vlasnička. Kao i kod XSD-a, isti objekti za serijalizaciju/deserijalizaciju se koriste i za šemu i za podatke.

Schema je internet projekat koji je trenutno u verziji 5 (objavljen 13. oktobra 2016.). Postoji nekoliko validatora dostupnih za različite programske jezike, svaki sa različitim nivoom usklađenosti. Ne postoji standardna ekstenzija datoteke, ali neki stručnjaci predlažu odobravanje .schema.json.

MIME tip

Zvanični MIME tip za JSON tekst je "application / json". Iako je većina modernih implementacija usvojila službeni MIME tip, mnoge aplikacije nastavljaju da pružaju podršku za druge MIME tipove. Mnogi dobavljači usluga, pretraživači, serveri, web aplikacije, biblioteke, 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 Google Search API, Yahoo!, Flickr, Facebook API, DojoToolkit 0.4 i tako dalje.

JSON-RPC

JSON-RPC je protokol za poziv udaljene procedure (RPC) baziran na JSON-u kreiran kao zamjena za XML-RPC ili SOAP. To je jednostavan protokol koji definira samo nekoliko tipova podataka i naredbi. Omogućava sistemu da šalje obavještenja (informacije serveru na koje nije potreban odgovor) i višestruke pozive serveru na koje se može odgovoriti van reda.

AJAJ

Asinhroni JavaScript i JSON (ili AJAJ) odnose se na istu metodologiju dinamičke web stranice kao i Ajax, ali umjesto XML-a dominira JSON format podataka. AJAJ je tehnologija za razvoj weba koja omogućava web stranici da zatraži nove podatke nakon učitavanja u pretraživač. Obično ih prikazuje sa servera kao odgovor na radnje korisnika na toj stranici. Na primjer, ono što korisnik unese u polje za pretragu, klijentski kod zatim šalje serveru, koji odmah odgovara padajućom listom odgovarajućih stavki baze podataka.

Sigurnosni problemi

JSON tekst je definiran kao objekt serijalizacije podataka. Međutim, njegov dizajn, kao labavi podskup JavaScript jezika za skriptiranje, predstavlja nekoliko sigurnosnih problema. Oni se fokusiraju na korištenje Javascript interpretera za dinamičko izvršavanje JSON teksta kao što je inline JavaScript. Ovo izlaže program pogrešnim ili zlonamernim skriptama. Ovo je ozbiljan problem kada se radi o podacima preuzetim sa Interneta.

Ova jednostavna i popularna, ali rizična metoda koristi prednosti JavaScripteval kompatibilnosti.

Neki programeri pogrešno vjeruju da je JSON tekst također sintaktički sličan JavaScriptu, iako je to samo djelimično tačno. Stoga se vjeruje da je jednostavan način za JavaScript program da analizira podatke u ovom formatu korištenje ugrađene JavaScripteval funkcije, koja je dizajnirana za procjenu Javascript izraza. Umjesto korištenja specifičnog parsera, sam interpreter se stoga koristi za izvršavanje JSON podataka, stvarajući prirodne JavaScript objekte. Međutim, ova metoda je rizična ako postoji mogućnost da JSON podaci mogu sadržavati proizvoljan Javascript, koji će se zatim izvršiti na isti način. Ako se ne preduzmu nikakvi koraci za provjeru valjanosti podataka, metoda eval je ranjiva na sigurnosne propuste gdje podaci i cjelokupno JavaScript okruženje nisu pod kontrolom jednog pouzdanog izvora.

Na primjer, ako podaci nisu potvrđeni, napadnuti su zlonamjernim JavaScriptom. Takva kršenja također mogu predstavljati rizik od krađe podataka, krivotvorenja autentifikacije i druge potencijalne zloupotrebe podataka i resursa.

Stoga je nova funkcija JSON.parse dizajnirana kao sigurnija alternativa eval-u. Posebno je dizajniran za rukovanje JSON podacima, a ne JavaScript-om. Prvobitno je bilo planirano za uključivanje u četvrto izdanje standarda ECMAScript, ali to se nije dogodilo. Prvi put je dodat u verziji 5 i sada ga podržavaju glavni pretraživači.

JSON (JavaScript Object Notation) je format za razmjenu podataka u tekstualnom obliku. Omogućava vam prijenos složenih struktura podataka u serijaliziranom obliku. Ovaj format prijenosa podataka postao je toliko popularan da su funkcije za obradu podataka u ovom formatu dodane PHP jezgru od verzije 5.2.0. To znači da nema potrebe za povezivanjem dodatnih ekstenzija. JSON format podataka ljudi dobro razumiju. Osim toga, ova vrsta razmjene podataka se široko koristi između različitih API servisa. A uz ispravan razvoj algoritama za razmjenu informacija, možete dobiti vrlo veliku brzinu nego, na primjer, kada radite s podacima u XML formatu.

Slanje podataka

Možete slati podatke u JSON formatu na dva načina: formirati GET ili POST zahtjev sa kodiranim podacima koji se nalaze u GET ili POST varijabli ili staviti podatke u tijelo dokumenta. U praksi se obično koristi druga opcija.

Za slanje podataka potrebne su sljedeće funkcije:

  • string json_encode(mješovita vrijednost [, int opcije = 0])

    Parametar vrijednosti je podatak koji treba kodirati. Bilo koji tip je podržan osim tipa resurs... Parametar opcija sadrži bitmasku mogućih isporučenih vrijednosti (pogledajte tabelu za navedene JSON konstante).

  • resurs stream_context_create (])

    Ova funkcija je namijenjena kreiranju i vraćanju konteksta toka s opcijama navedenim u parametru opcija. Opcijski parametar opcija mora biti tipa asocijativnog niza. U početku je prazan. Drugi opcioni parametar parametara također mora biti asocijativni niz u formatu $ data [‘name’] = vrijednost.

  • string file_get_contents(string filename [, bool use_include_path [, kontekst resursa [, int offset [, int maxlen]]]])

    Korištenje ove funkcije vam omogućava da dobijete sadržaj datoteke kao string. Parametar filename je naziv datoteke za čitanje. U parametru use_include_path od PHP 5, možete koristiti konstantu FILE_USE_INCLUDE_PATH da biste pronašli datoteku u uključenoj putanji. Parametar konteksta predstavlja resurs konteksta kreiran korištenjem stream_context_create (). U slučaju neuspjelog pokušaja otvaranja datoteke, vrijednost će biti vraćena false... Parametar offset sadrži pomak od kojeg se počinju čitati podaci. Parametar maxlen specificira veličinu primljenih podataka.

    Bilješka: Offset nije specificiran kada radite sa udaljenim tokovima.

Ispod je primjer slanja podataka u JSON formatu:

// Podaci za slanje $ request = array ("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => niz (1,2,3,4 , 5,6,7)); // Odredite opcije za kontekst toka $ options = array ("http" => array ("method" => "POST", "header" => "Content-Type: application / json; charset = utf-8 \ r \ n "," content "=> json_encode ($ zahtjev))); // Kreiraj kontekst toka $ context = stream_context_create ($ opcije); // Slanje podataka i primanje rezultata echo file_get_contents ("http://test.ru/json.php", 0, $ context);

Koristi improviziranu strukturu podataka koja se sastoji od datuma početka i završetka i niza brojeva za neke uslovne zapise. Imajte na umu da u zaglavlju zahtjeva Content-Type tip je “application / json”.

Preuzimanje podataka

Da bi se preneseni podaci primili na gore opisani način, potrebno je pročitati podatke iz ulaznog toka “ php: // ulaz”.

Funkcije koje se koriste za prihvatanje podataka:

  • mješovito json_decode(string json [, bool assoc = false [, int dubina = 512 [, int options = 0]]])

    Ova funkcija dekodira JSON string. Parametar json specificira string za dekodiranje. Parametar assoc kontrolira da li se vraćeni podaci pretvaraju u asocijativni niz. Ako postoji takva potreba, tada morate navesti kao vrijednost ovog parametra istinito... Parametar dubine označava dubinu rekurzije. I posljednji četvrti parametar, opcije, sadrži bitmasku opcija za dekodiranje. Trenutno samo podržano JSON_BIGINT_AS_STRING(veliki cijeli brojevi se prema zadanim postavkama pretvaraju u float)

  • resurs fopen(string filename, string mode [, bool use_include_path [, kontekst resursa]])

    Otvara datoteku i vraća deskriptor datoteke. Parametar filename je imenovani resurs koji ukazuje na datoteku. Parametar mode određuje tip pristupa datoteci (pogledajte tabelu sa listom mogućih načina za fopen ()). Zatim postoje dva opciona parametra: use_include_path i context. Kada postavite parametar use_include_path na istinito ili 1 i pod uslovom da je relativna putanja navedena kao imenovani resurs, datoteka koja se otvara će se tražiti na listi direktorijuma koje koriste funkcije uključiti i zahtijevaju... U praksi se ovaj parametar praktički ne koristi. Parametar konteksta se koristi za specificiranje konteksta resursa.

  • string stream_get_contents(ručnik resursa [, int maxlen = -1 [, int offset = -1]])

    Ova funkcija vam omogućava da dobijete sadržaj toka kao string. Parametar ručke je resurs niti. Maxlen parametar sadrži maksimalni broj bajtova za čitanje. Podrazumevano je postavljeno na -1, što označava da su svi podaci primljeni. Parametar offset sadrži pomak od kojeg se počinju čitati podaci. Podrazumevano je također postavljeno na -1, što znači da će se očitavanje obaviti sa početne pozicije.

Ispod je primjer dobivanja podataka u JSON formatu na strani servera:

// Otvaranje ulaznog toka za čitanje $ f = fopen ("php: // input", "r"); // Dobivamo sadržaj toka $ data = stream_get_contents ($ f); if ($ data) (// kod za obradu print_r (json_decode ($ data));)

Rezultirajuća struktura podataka:

StdClass Object (=> 2013-10-10 => 2013-10-10 => Niz (=> 1 => 2 => 3 => 4 => 5 => 6 => 7))

Bilješka: potrebno je uzeti u obzir činjenicu da za rad sa JSON formatom podaci moraju biti u utf-8 kodiranju.

JSON je obezbijedio konstante za funkciju json_encode ().

JSON_HEX_TAG (cijeli broj) Svi su kodirani u \ u003C i \ u003E. Dostupno od PHP 5.3.0.
JSON_HEX_AMP (cijeli broj) Svi & su kodirani u \ u0026. Dostupno od PHP 5.3.0.
JSON_HEX_APOS (cijeli broj) Svi znakovi su kodirani u \ u0027. Dostupno od PHP 5.3.0.
JSON_HEX_QUOT (cijeli broj) Svi znakovi su "kodirani u \ u0022. Dostupno od PHP 5.3.0.
JSON_FORCE_OBJECT (cijeli broj) Emitirajte objekt umjesto niza kada koristite neasocijativni niz. Ovo je korisno kada program ili kod primatelj očekuje objekt ili je niz prazan. Dostupno od PHP 5.3.0.
JSON_NUMERIC_CHECK (cijeli broj) Kodirajte nizove koji sadrže brojeve kao brojeve. Dostupno od PHP 5.3.3.
JSON_BIGINT_AS_STRING (cijeli broj) Kodira velike cijele brojeve kao njihove ekvivalente stringova. Dostupno od PHP 5.4.0.
JSON_PRETTY_PRINT (cijeli broj) Koristite razmake u vraćenim podacima da ih formatirate. Dostupno od PHP 5.4.0.
JSON_UNESCAPED_SLASHES (cijeli broj) Nemojte pobjeći /. Dostupno od PHP 5.4.0.
JSON_UNESCAPED_UNICODE (cijeli broj) Nemojte kodirati višebajtne Unicode znakove (podrazumevano su kodirani kao \ uXXXX). Dostupno od PHP 5.4.0.

Lista mogućih načina za fopen () koristeći način

'R' Otvara datoteku samo za čitanje; postavlja pokazivač na početak datoteke.
'R +' Otvara datoteku za čitanje i pisanje; postavlja pokazivač na početak datoteke.
'W' Otvara datoteku samo za pisanje; postavlja pokazivač na početak datoteke i skraćuje datoteku na nultu dužinu. Ako datoteka ne postoji, pokušava je kreirati.
'W +' Otvara datoteku za čitanje i pisanje; postavlja pokazivač na početak datoteke i skraćuje datoteku na nultu dužinu. Ako datoteka ne postoji, pokušava je kreirati.
'A' Otvara datoteku samo za pisanje; stavlja pokazivač na kraj datoteke. Ako datoteka ne postoji, pokušava je kreirati.
'A +' Otvara datoteku za čitanje i pisanje; stavlja pokazivač na kraj datoteke. Ako datoteka ne postoji, pokušava je kreirati.
'X' Kreira i otvara samo za pisanje; postavlja pokazivač na početak datoteke. Ako datoteka već postoji, fopen () neće uspjeti, vratiti FALSE i izbaciti grešku na nivou E_WARNING. Ako datoteka ne postoji, pokušat će je kreirati. Ovo je ekvivalentno specificiranju oznaka O_EXCL | O_CREAT za interni otvoreni (2) sistemski poziv.
'X +' Kreira i otvara za čitanje i pisanje; inače ima isto ponašanje kao 'x'.
'C' Otvara datoteku samo za pisanje. Ako datoteka ne postoji, onda je kreirana. Ako datoteka postoji, onda se ne skraćuje (za razliku od 'w'), a poziv ovoj funkciji ne uzrokuje grešku (kao što je slučaj sa 'x'). Pokazivač datoteke će biti postavljen na početak datoteke. Ovo može biti korisno ako želite da zaključate datoteku (pogledajte flock ()) prije promjene, jer korištenjem 'w' možete skratiti datoteku prije nego što se zaključa (ako želite skratiti datoteku, možete koristiti ftruncate () nakon zahtjev za zaključavanje).
'C +' Otvara datoteku za čitanje i pisanje; inače ima isto ponašanje kao 'c'.

JavaScript nam omogućava ne samo da dodamo interaktivnost web stranicama, već nam omogućava i izvršavanje zadataka koji su nekada pripadali serverima. JSON pruža jednostavan način za kreiranje i pohranjivanje strukturiranih podataka u JavaScript-u. JSON je veoma popularan i odlična je alternativa XML-u. JSON (JavaScript Object Notation), kao što ime govori, zasniva se na kreiranju javascript objekata. JavaScript objektima se može lako manipulisati, raščlaniti koristeći isti JavaScript.

Za razliku od XML-a, JSON rečenice lako sastavljaju i ljudi i računari. Podaci u JSON formatu mogu se, na primjer, dodijeliti varijabli (ovako kreiramo objekt); onda se ovi podaci mogu pročitati kroz novokreirani objekt.

Prvo kreiramo varijablu za čuvanje naših podataka, a zatim koristimo JSON za definiranje objekta. Naš objekat je prilično jednostavan: polje firstName i vrijednost Ray. JSON stringovi moraju biti stavljeni u navodnike. Ako koristite brojeve, navodnici nisu obavezni.

Ovaj primjer će prikazati vrijednost svojstva firstName u pretraživaču.

Kreirajte objekt čuvara mjesta

Hajde da napravimo realističniji primer: ubacimo naše JSON podatke u DOM objekat.

var data = ("firstName": "Ray"); document.getElementById ("placeholder"). innerHTML = data.firstName;

Sada, umjesto prikaza upozorenja, stavljamo podatke unutar HTML elementa. JSON podaci mogu naravno biti mnogo složeniji. Pokušajmo dodati još polja.

data = ("firstName": "Ray", "lastName": "Villalobos", "joined": 2012); document.getElementById ("placeholder"). innerHTML = data.firstName + "" + data.lastName + "" + data.joined;

Imajte na umu da su JSON podaci formatirani na specifičan način radi boljeg razumijevanja. Polje "pridruženo" je 2012, koje ne zahtijeva navodnike jer je broj. Hajde da pogledamo nešto malo složenije.

Dodavanje nizova

Šta ako želimo da predstavimo grupu ljudi... onda moramo koristiti nizove. JSON nizovi se mogu kreirati pomoću uglastih zagrada. Pogledajmo kako će naši podaci izgledati za više korisnika.

Var data = ("users": [("firstName": "Ray", "lastName": "Villalobos", "joined": 2012), ("firstName": "John", "prezime": "Jones", "joined": 2010)]) document.getElementById ("placeholder"). innerHTML = data.users.firstName + "" + data.users.lastName + "" + data.users.joined;

Izgleda malo komplikovanije, ali u stvarnosti nije teško razumjeti. JSON objekat se kreira pomoću vitičastih zagrada; niz se kreira pomoću uglastih zagrada. Dakle, da bismo organizirali naše podatke, kreirali smo korisnički objekt u koji smo postavili niz. Niz sadrži druge objekte. Svaki par (ime/vrijednost) je odvojen zarezom.

Obratite pažnju na to kako se promijenio kod za umetanje imena. Povezali smo novi objekt korisnika i zatim pokazali na prvi element u nizu koristeći uglaste zagrade. Dodajmo još jedan sloj našoj strukturi podataka.

Var data = ("users": [("firstName": "Ray", "lastName": "Villalobos", "joined": ("month": "January", "day": 12, "year": 2012 )), ("firstName": "John", "lastName": "Jones", "joined": ("month": "April", "day": 28, "year": 2010))]) dokument. getElementById ("placeholder"). innerHTML = data.users.firstName + "" + data.users.lastName + "-" + data.users.joined.month;

Spojeno svojstvo sada sadrži objekat sa više polja; nema potrebe za korištenjem niza, pa koristimo notaciju objekata. Sada imamo podatke za nekoliko korisnika, vrijeme je da prođemo kroz svakog korisnika i prikažemo ih na listi.

Implementacija liste korisnika (prelazak JSON objekta)

Dakle, hajde da koristimo javascript i napravimo listu korisnika.

Var data = ("users": [("firstName": "Ray", "lastName": "Villalobos", "joined": ("month": "January", "day": 12, "year": 2012 )), ("firstName": "John", "lastName": "Jones", "joined": ("month": "April", "day": 28, "year": 2010))]) var output = "

    ";) izlaz + ="
"; document.getElementById (" placeholder "). innerHTML = output;

Za ponavljanje svih svojstava objekta postoji konstrukcija za..in:

Za (var ključ u objektu) (// ključ - ime svojstva // objekt - vrijednost svojstva ...)

Ovdje prolazimo kroz sve elemente niza; mi spremamo podatke u izlaznu varijablu i stavljamo podatke u element sa id-om jednakim placeholderu. možete reći da se naši podaci razvijaju malo sporo.

Čitanje JSON-a iz vanjske datoteke

Bilo bi dobro sačuvati podatke u eksternom fajlu i pročitati ih po potrebi. Koristiću jQuery biblioteku, tako da prvo treba da uključimo jQuery biblioteku; tada pozivamo funkciju getJSON. Ovako izgleda naš kod:

JSON uzorak

Ovo je prilično isti kod, ali podaci se izlaze van. Sve završavamo sa funkcijom getJSON, koja obavlja sav težak posao čitanja datoteke. Datoteka data.json, recimo, nalazi se u istom direktoriju i izgleda ovako:

("korisnici": [("firstName": "Ray", "lastName": "Villalobos", "joined": ("month": "January", "day": 12, "year": 2012)), ("firstName": "John", "lastName": "Jones", "joined": ("month": "April", "day": 28, "year": 2010))])

Kao što vidite, JSON je zaista jednostavan za čitanje, a kada se naviknete na zagrade postaje lako kodirati.

JSON je dio standarda ECMAScript od 1999. godine, kada je ECMA definirala funkciju eval () koja je svjesna formata. Porastao je u popularnosti zajedno sa rastućim uspjehom Ajaxa. Reč JSON se često pojavljuje kada neko priča o Ajaxu. Poznato je da je JSON još jedan format podataka, da zamjenjuje XML i da ga mnogi programeri aktivno podržavaju. Ali šta je JSON i koje su njegove prednosti?

Zašto JSON?

Prednost JSON-a je u tome što ga JavaScript prepoznaje. Nema potrebe za raščlanjivanjem dokumenta, kao što je slučaj sa XML-om, za prijenos podataka preko Interneta.

JSON i XML

JSON prednosti:

  • Lako za čitanje i razumijevanje.
  • Jednostavan za upotrebu.

XML prednosti:

  • Proširivi

I XML i JSON imaju mogućnost integracije velikih količina podataka u binarnom obliku.

JSON sintaksa

JSON komponente:

  • Objekti: sadrže objekte ili atribute.
  • Skalarne varijable: broj, niz, logička varijabla.
  • Niz.
  • Doslovne vrijednosti: null, istinito, false, "niz znakova", i numeričke vrijednosti.

Objekt

Sadrži element ili listu elemenata, gdje je svaki element opisan na sljedeći način:

"ime": "vrijednost"

Sintaksa objekta:

(element, element, ....)

Niz

Skup vrijednosti odvojen zarezima.

[vrijednost, vrijednost, ....]

Značenje

Vrijednost može biti: objekt, niz, literalna vrijednost (niz, broj, istinito, false, null).

Ne treba vam ništa drugo da kreirate JSON fajl!

Uzorak JSON fajla

Jednostavan primjer strukture menija. Ovaj objekat sadrži atribute i niz koji uključuje druge objekte trake menija.

("meni": "Datoteka", "naredbe": [("naslov": "Novo", "akcija": "KreirajDoc"), ("naslov": "Otvori", "akcija": "OpenDoc"), ("title": "Zatvori", "action": "CloseDoc")]) XML ekvivalent:

File Novo</value> <action>CreateDoc</action> </item> <item> <title>Otvori</value> <action>OpenDoc</action> </item> <item> <title>Zatvori</value> <action>CloseDoc</action> </item> </commands> </root> </p><h3><span>Kako koristiti format</span></h3> <p>JSON fajl vam omogućava da otpremite podatke sa servera ili na server. Na primjer, spremanje sadržaja obrasca koji je korisnik upravo popunio. Proces uključuje tri faze: obradu od strane pretraživača, obradu od strane servera i razmjenu podataka između njih.</p> <h4><span>Klijentska strana (preglednik)</span></h4> <p>Ovaj dio je prilično jednostavan jer je JSON dio JavaScript definicije. Sadržaj datoteke ili definirajući podaci se dodjeljuju varijablama i one postaju programski objekti.</p> <h4>Serverski dio</h4> <p>JSON datoteku koriste različiti programski jezici, uključujući PHP i Javu, zahvaljujući prisutnosti parsera koji vam omogućavaju da primate sadržaj, pa čak i da ga konvertujete u jezičke klase i atribute. JSON stranica sadrži parsere za mnoge programske jezike.</p> <h4>Razmjena podataka</h4> <ul><li><span>koristeći XMLHttpRequest.</span></li> </ul><p>JSON fajl obrađen JavaScript funkcijom <i>eval ()</i>... Slanje datoteke na server može se obaviti pomoću XMLHttpRequest. Datoteka se šalje kao tekstualna datoteka i obrađuje je parser programskog jezika koji se koristi na serveru.</p> <h3>Primjer</h3> <p>XMLHttpRequest kod:</p><p>Var req = novi XMLHttpRequest (); req.open ("GET", "file.json", istina); req.onreadystatechange = myCode; // rukovalac req.send (null);</p><p>JavaScript rukovalac:</p><p>Funkcija myCode () (if (req.readyState == 4) (var doc = eval ("(" + req.responseText + ")");)) Upotreba podataka: var menuName = document.getElementById ("jsmenu"); // tražimo polje menuName.value = doc.menu.value; // dodijeli vrijednost polju Kako dobiti podatke: doc.commands.title // pročitaj vrijednost polja "title" u nizu doc.commands.action // pročitaj vrijednost polja "action" u polju niz</p> <p><i>Lekcija koja govori o tome šta je JSON i kako ima prednosti u odnosu na druge formate podataka.</i></p> <h2>JSON koncept</h2> <p>JSON (JavaScript Object Notation) je tekstualni format za predstavljanje podataka u JavaScript notaciji objekata.</p> <p>To znači da su podaci u JSON-u organizirani baš kao što su u JavaScript objektu. Ali za razliku od potonjeg, JSON format snimanja ima neke posebnosti, o kojima će biti riječi malo kasnije.</p> <p>JSON se obično koristi zajedno sa AJAX-om tako da server može prenijeti podatke u prikladnom obliku u JavaScript, koji će ih zatim prikazati na stranici.</p> <h2>Struktura JSON formata</h2> <p>Svako ko je upoznat sa procesom kreiranja objekata u JavaScriptu neće vidjeti ništa novo u strukturi JSON formata. To je zato što se JSON struktura poklapa sa strukturom JavaScript objekta uz neka ograničenja.</p> <p>Lakše je razmišljati o JSON-u kao o kontejneru elemenata. Svaki element u takvom kontejneru je strukturna jedinica koja se sastoji od ključa i vrijednosti.</p> <p><img src='https://i2.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-structure-json.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>U ovom slučaju, vrijednost je direktno povezana s ključem i formira takozvani par ključ-vrijednost. Da biste dobili vrijednost u takvom objektu, morate znati njegov ključ. Sintaktički, takvi podaci u JSON-u se zapisuju na sljedeći način:</p> <p><img src='https://i2.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-json-syntax-data.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>U gornjem unosu možete vidjeti da je ključ odvojen od vrijednosti pomoću dvotočke (:). U ovom slučaju, ključ u JSON objektu mora biti stavljen u dvostruke navodnike. Ovo je prva karakteristika JSON-a koja ga razlikuje od JavaScript objekta. Jer u JavaScript objektu, ključ (svojstvo objekta) ne mora biti stavljen u dvostruke navodnike.</p> <p><i> </i> Na primjer, struktura objekta koja je važeća sa JavaScript tačke gledišta i nije važeća sa JSON tačke gledišta:</p><p>Var person = (ime: "Ivan";) // JavaScript objekat</p><p>Upozorenje: pokušajte podesiti naziv ključa kako ne biste komplicirali pristup podacima, tj. poželjno je koristiti notaciju kamila prilikom sastavljanja imena ili koristiti donju crtu ("_") za povezivanje riječi.</p> <p>Vrijednost ključa u JSON-u može se napisati u jednom od sljedećih formata: string (string), broj (broj), objekat (objekat), niz (niz), boolean (booleova vrijednost istinita ili lažna), null (posebna JavaScript vrijednost) .</p> <p>to <b>drugo ograničenje je u JSON-u, budući da JavaScript objekat može sadržavati bilo koji tip podataka, uključujući funkciju</b>.</p><p>Var person = ("name": "Ivan"; "setName": funkcija () (console.log (this.name);)) // JavaScript objekat</p><p>Da biste odvojili jedan element (par ključ-vrijednost) od drugog, koristite znak zarez (,).</p> <p>Na primjer, razmotrite JSON sastavljen od različitih tipova podataka.</p> <p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-json-types-data.png' align="center" height="682" width="543" loading=lazy loading=lazy></p> <p> <i> </i> Napomena: JSON format podataka ne dozvoljava komentare unutar svoje strukture.</p> <h2>Rad sa JSON-om u JavaScript-u</h2> <p>Za razliku od JavaScript objekta, JSON je string.</p> <p>Na primjer:</p><p>// na primjer varijabla personData, sadrži niz koji je JSON var personData = "(" ime ":" Ivan "," starost ": 37," majka ":(" ime ":" Olga "," starost ": 58), "djeca": ["Maša", "Igor", "Tanja"], "oženjen": istina, "pas": null) ";</p><p>Rad sa JSON-om se obično radi na dva načina:</p> <ol><li>Parsiranje prevodi string koji sadrži JSON u JavaScript objekat.</li> <li>Pretvorite JavaScript objekat u JSON string. Drugim riječima, ova akcija radi suprotno od raščlanjivanja.</li> </ol><h3>Parsing JSON</h3> <p>Parsing JSON, tj. prevođenje JSON stringa u JavaScript objekat se vrši korištenjem metode eval () ili parse ().</p> <p>Koristeći metodu eval ():</p><p>// varijabla person je JavaScript objekat koji se dobija izvršavanjem JSON koda (string) var person = eval ("(" + personData + ")");</p> <p>Korištenje metode JSON.parse ():</p><p>// varijabla person je JavaScript objekat koji se dobija raščlanjivanjem JSON stringa var person = JSON.parse (personData);</p><h3>Pretvaranje JavaScript objekta u JSON string</h3> <p>Prevođenje JavaScript objekta u JSON string se vrši pomoću metode JSON.stringify (). Ova metoda radi suprotno od metode JSON.parse ().</p><p>Var personString = JSON.strigify (osoba);</p><h2>Prednosti JSON formata</h2> <p>JSON format podataka ima sljedeće prednosti:</p> <ul><li>zgodne i brze metode za pretvaranje (parsiranje) JSON stringa u JavaScript objekat i obrnuto;</li> <li>jasna i jednostavna struktura podataka;</li> <li>veoma male veličine u poređenju sa drugim formatima podataka (npr. XML). To je zato što JSON format sadrži najmanje moguće formatiranje, tj. samo nekoliko specijalnih znakova koristi se u njegovom pisanju. Ovo je veoma važna prednost jer podaci predstavljeni u JSON formatu učitat će se brže nego da su predstavljeni u drugim formatima.</li> </ul><p>Zbog činjenice da ovaj format ima toliko prednosti, počeo je da se koristi ne samo u JavaScript-u, već i u mnogim drugim jezicima, kao što su C, Ruby, Perl, Python, PHP, itd.</p> <h3>Poređenje JSON i XML formata</h3><p>JSON ima sljedeće prednosti u odnosu na XML:</p> <ol><li>Za neke podatke, JSON veličina će biti znatno manja od veličine XML-a prilikom prijenosa nekih podataka.</li> <li>JSON ima bolje metode konverzije u JavaScript strukture podataka nego XML.</li> <li>JSON je lakše kreirati nego XML.</li> </ol><p><img src='https://i1.wp.com/itchief.ru/assets/images/tickets/2015.12/json-vs-xml.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>Poslije raščlanjenim JSON podacima rukuje se kao JavaScript objektom.</p><p>// JSON var personData = "(" ime ":" Ivan "," starost ": 37," majka ":(" ime ":" Olga "," starost ": 58)," deca ": [" Maša " , "Igor", "Tanja"], "oženjen": istina, "pas": null) "; // JavaScript objekat person var person = JSON.parse (personData);</p><p>Razmotrimo glavne tačke:</p><p>// dobijemo vrijednosti ključa (svojstva) name person.name; osoba ["ime"]; // dobijemo vrijednosti imena ključa (svojstva) koje se nalazi u matičnom objektu person.mother.name; // izbriši element starosti delete (person.age) // dodaj (ili ažuriraj) ključ (svojstvo) person.eye = "braon"; // kada radite s nizovima, morate koristiti metode dizajnirane za rad s nizovima // ukloniti 1 element iz niza (metoda spajanja) person.children.splice (1,1) // dodati element u niz (push metoda ) osoba.djeca guranje ("Katya");</p><p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-woks-with-json-after-parsing.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>Za iteraciju preko elemenata u objektu, možete koristiti for..in petlju:</p><p>Za (ključ osobno) (ako (person.hasOwnProperty (ključ)) (// ključ = ključ // vrijednost = osoba console.log ("Ključ =" + ključ); console.log ("Vrijednost =" + osoba) ;) // ako objekt osobe ima ključ (ako osoba ima svojstvo ključa)) // iteriraj sve ključeve (osobine) u objektu</p><p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-for-in-object.png' align="center" height="173" width="371" loading=lazy loading=lazy></p> <p>Za ponavljanje elemenata niza možete koristiti sljedeću petlju:</p><p>Za (var i = 0; i</p><p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-for-in-array.png' align="center" height="115" width="253" loading=lazy loading=lazy></p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> <div class="post-social-counters-block"> <div style="margin-top: 12px"> <noindex></noindex> </div> </div> </div> </div> <a name="comments"></a> <h3 class="best-theme-posts-title">Top srodni članci</h3> <div class="container-fluid"> <div class="best-theme-posts row"> <div class="theme-post col-sm-4"> <a href="https://bumotors.ru/bs/kak-obnovit-programmnoe-obespechenie-na-samsung-galaxy-obnovlenie.html"> <div class="img_container"><img src="/uploads/9b2a37bc30c1c7aa18983f62a4006894.jpg" border="0" alt="Ažurirajte Android OS na Samsung telefonu Ažurirajte softver na Samsung telefonu" width="320" height="180" / loading=lazy loading=lazy></div> <span class="theme-post-link">Ažurirajte Android OS na Samsung telefonu Ažurirajte softver na Samsung telefonu</span> </a> </div> <div class="theme-post col-sm-4"> <a href="https://bumotors.ru/bs/kakie-smartfony-obnovyatsya-do-android-7-1-1-obzor-android-nougat-vse.html"> <div class="img_container"><img src="/uploads/7a325de46ffb1750fce3014bef696864.jpg" border="0" alt="Koji pametni telefoni će se nadograditi na Android 7" width="320" height="180" / loading=lazy loading=lazy></div> <span class="theme-post-link">Koji pametni telefoni će se nadograditi na Android 7</span> </a> </div> <div class="theme-post col-sm-4"> <a href="https://bumotors.ru/bs/chto-luchshe-aifon-7-ili-7s-dizain-materialy-korpusa-razmery.html"> <div class="img_container"><img src="/uploads/ee6b379c098d2070d388d7ce2c06b361.jpg" border="0" alt="Dizajn, materijali karoserije, dimenzije" width="320" height="180" / loading=lazy loading=lazy></div> <span class="theme-post-link">Dizajn, materijali karoserije, dimenzije</span> </a> </div> </div> </div> </div> <a name="comments"></a> </div> <div class="right-column col-sm-4 col-md-4"> <div class="write"> <span class="tags-title">Kategorije:</span> <ul style="height: 286px;" id="right-tags" data-tagscount="18" data-currentmaxtag="10" class="tags"> <li class=""><a href="https://bumotors.ru/bs/category/programs/">Programi</a></li> <li class=""><a href="https://bumotors.ru/bs/category/safety/">Sigurnost</a></li> <li class=""><a href="https://bumotors.ru/bs/category/windows-10/">Windows 10</a></li> <li class=""><a href="https://bumotors.ru/bs/category/iron/">Iron</a></li> <li class=""><a href="https://bumotors.ru/bs/category/windows-8/">Windows 8</a></li> <li class=""><a href="https://bumotors.ru/bs/category/vkontakte/">U kontaktu sa</a></li> <li class=""><a href="https://bumotors.ru/bs/category/errors/">Greške</a></li> </ul> </div> <div class="banner"> </div> </div> </div> </div> <div style="clear:both"></div> </div> <div class="footer"> <div class="subscribe"> <div class="main-wrapper container"> <div class="row"> <div class="col-sm-8"> </div> <div class="col-sm-4"> <div class="social"> <a href="" class="vk social-ico"></a> <a href="https://facebook.com/" class="fb social-ico"></a> <a href="https://twitter.com/" class="tw social-ico"></a> </div> </div> </div> </div> </div> <div class="info"> <div class="main-wrapper container"> <div class="row"> <span class="footer-info col-xs-12">© 2021 bumotors.ru. Kako podesiti pametne telefone i računare. Informativni portal.</span> </div> </div> </div> </div> </body> </html>