Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Greške
  • Pohranjivanje stila dokumenta u json formatu. JSON za početnike, koristeći javascript i jQuery

Pohranjivanje stila dokumenta u json formatu. JSON za početnike, koristeći javascript i jQuery

JSON je dio standarda ECMAScript od 1999., kada je ECMA definirala funkciju eval() za rukovanje formatom. Počeo je dobivati ​​popularnost zajedno s rastućim uspjehom Ajaxa. Riječ JSON često se pojavljuje kada netko govori o Ajaxu. Poznato je da je JSON drugačiji format podataka, da zamjenjuje XML i da ga mnogi programeri aktivno podržavaju. Ali što je zapravo JSON i koje su njegove prednosti?

Zašto JSON?

Prednost JSON-a je što ga analizira JavaScript. Nema potrebe analizirati dokument, kao što je slučaj s XML-om, za prijenos podataka putem Interneta.

JSON i XML

Prednosti JSON-a:

  • Lako za čitanje i razumijevanje.
  • Jednostavan za korištenje.

Prednosti XML-a:

  • Ima mogućnosti proširenja

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: ništavan, pravi, lažno, "znakovni niz", i numeričke vrijednosti.
Objekt

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

"ime": "vrijednost"

Sintaksa objekta:

( element, element, .... )

Niz

Skup vrijednosti odvojenih zarezom.

[značenje, značenje, ....]

Značenje

Vrijednost može biti: objekt, niz, literalna vrijednost (string, broj, pravi, lažno, ništavan).

Za izradu JSON datoteke ne trebate ništa više!

Primjer JSON datoteke

Jednostavan primjer strukture izbornika. U ovaj objekt sadrži atribute i niz koji uključuje druge objekte trake izbornika.

( "menu": "Datoteka", "naredbe": [ ( "naslov": "Novo", "akcija": "StvoriDoc" ), ( "naslov": "Otvori", "akcija": "OpenDoc" ), ( "title": "Close", "action": "CloseDoc") ] ) XML ekvivalent: File New CreateDoc Open OpenDoc Close CloseDoc

Kako koristiti format

JSON datoteka omogućuje vam preuzimanje podataka s ili na poslužitelj. Na primjer, spremanje sadržaja obrasca koji je korisnik upravo ispunio. Proces uključuje tri faze: obradu preglednika, obradu poslužitelja i razmjenu podataka između njih.

Klijentski dio (preglednik)

Ovaj dio je prilično jednostavan jer je JSON dio JavaScript definicije. Sadržaj datoteke ili definirajući podaci dodjeljuju se varijablama i one postaju programski objekti.

Serverski dio

JSON datoteku koriste razni programski jezici, uključujući PHP i Javu, zahvaljujući prisutnosti parsera koji vam omogućuju da primate sadržaj i čak ga pretvarate u klase i atribute jezika. Na web stranici JSON možete pronaći parsere za mnoge programske jezike.

Razmjena podataka
  • koristeći XMLHttpRequest.

JSON datoteka se obrađuje JavaScript funkcija eval(). Objavljivanje datoteke na poslužitelju može se izvršiti pomoću XMLHttpRequest. Datoteka se šalje kao tekstualna datoteka i obrađuje je parser programskog jezika koji se koristi na poslužitelju.

Primjer

XMLHttpRequest kôd:

Var req = new XMLHttpRequest(); req.open("GET", "file.json", istina); req.onreadystatechange = mojKod; // rukovatelj req.send(null);

JavaScript rukovatelj:

Funkcija myCode() ( if (req.readyState == 4) ( var doc = eval("(" + req.responseText + ")"); ) ) Upotreba podataka: var menuName = document.getElementById("jsmenu"); // potražite polje menuName.value = doc.menu.value; // dodijelite vrijednost polju Kako doći do podataka: doc.commands.title // pročitajte vrijednost polja "title" u nizu doc.commands.action // pročitajte vrijednost polja "action" u niz

U ovom članku želim govoriti o tekstualnom formatu za razmjenu podataka - JSON, a posebno o radu s ovim formatom u PHP-u.

JSON je kompaktni tekstualni format podataka. Može se koristiti iu internetskim uslugama prijenosa podataka i za pohranu informacija u strukturiranom obliku.

JSON( Engleski JavaScript objektna notacija) tekstualni je format za razmjenu podataka koji se temelji na JavaScriptu i često se koristi s ovim jezikom. Kao i mnogi drugi formati teksta,JSON ljudi lako čitaju.

Unatoč svom podrijetlu iz JavaScripta (točnije, iz podskupa jezika standarda ECMA-262 iz 1999.), format se smatra neovisan o jeziku i može se koristiti s gotovo svim programskim jezicima. Dostupan za mnoge jezike spreman kod za stvaranje i obradu podataka u JSON formatu.

Praktične prednosti korištenja JSON-a otkrivaju se kada koristite AJAX tehnologije. Format JSON je koncizniji i čitljiviji od XML-a i izvorni je za Javascript. Osim toga, moguće je umetnuti potpuno funkcionalne funkcije u JSON kod.

Da, upravo je u AJAX tehnologiji, po mom mišljenju, njena glavna primjena. Budući da AJAX tehnologija uključuje slanje zahtjeva klijenta poslužitelju. Zatim se zahtjev obrađuje na poslužitelju, a rezultat se šalje kao odgovor klijentu.

Tip podataka u JSON formatu

JSON podržava sve glavne formate podataka: nizove, brojeve, Booleove vrijednosti, kao i nizove i objekte (ključ: kombinacije vrijednosti odvojene zarezima i zatvorene u naramenice).

Evo primjera prikaza podataka u JSON formatu:

("id":"1","name":"ivan","country":"Rusija","office":["yandex","management"])

Pogledajmo što ovaj redak može prenijeti: osoba s imenom "ivan", pod identifikatorom "1", koja živi u zemlji "Rusija", radi u tvrtki "yandex" u odjelu "menadžmenta".

Navedimo još jedan primjer. Na stranici postoji obrazac Povratne informacije, radeći pomoću AJAX tehnologije. Posjetitelj ispuni podatke, zatim se šalju poslužitelju na provjeru; ako se ne pronađu pogreške, podaci se spremaju u bazu podataka i šalje se odgovor koji označava uspješno spremanje. Ali ako se pronađu pogreške, vraća se odgovor s vrstama pogrešaka.

Primjer odgovora na pogrešku u JSON formatu:

("error":"1","errorcode":["empty_pers","empty_mail","empty_phone","empty_letter","empty_scode"])

Što, na primjer, znači:

  • Obavezno popunite polje "Kontakt osoba".
  • Morate ispuniti polje "E-mail".
  • Morate ispuniti polje "Telefon".
  • Unesite tekst poruke
  • Morate ispuniti polje "Broj na slici".

Ako nema grešaka, vraća se odgovor:

("greška":"0")

Što označava uspješno slanje podataka.

U PHP-u, ekstenzija JSON koristi se za predstavljanje podataka u JSON formatu. U PHP verzije starije od 5.2.0 JSON podrška ugrađena je u jezgru, u više ranije verzije mora biti povezan s vašom skriptom dodatna datoteka s funkcijama.

Tako su u PHP-u dvije funkcije odgovorne za rad s podacima u JSON formatu: json_encode() i json_decode() .

Pretvaranje podataka u JSON format $json_data = array ("id"=>1,"name"=>"ivan","country"=>"Russia","office"=>array("yandex","management") ); echo json_encode($json_data); Pretvaranje podataka natrag iz JSON format$json_string="("id":1,"name":"ivan","country":"Rusija","office":["yandex","management"]) "; $obj=json_decode($json_string);

Sada će $obj sadržavati JSON podaci preveden u PHP objekt, kojem možete pristupiti na sljedeći način:

Echo $obj->name; //Prikazuje ime ivan echo $obj->office; //Prikaži tvrtku yandex

Kao što vidite, $obj->office je niz.

Foreach($obj->office as $val) echo $val;

Rad s JSON-om omogućuje razmjenu podataka s poslužiteljem u « čisti oblik» . Nema potrebe slati glomazne dijelove HTML koda.

ECMA-262 1999), format se smatra neovisnim o jeziku i može se koristiti s gotovo svim programskim jezicima. Za mnoge jezike postoji gotov kod za izradu i obradu podataka u JSON formatu. Korištenje

Zbog svoje kratkoće u usporedbi s XML-om, JSON format može biti prikladniji za serijalizaciju složenih struktura. Ako govorimo o web aplikacijama, u tom je smislu prikladna za zadatke razmjene podataka kako između preglednika i poslužitelja (AJAX), tako i između samih poslužitelja (HTTP softverska sučelja).

Budući da je JSON format podskup sintakse JavaScript jezik, tada se može brzo deserijalizirati pomoću ugrađene funkcije eval(). Osim toga, moguće je umetnuti potpuno funkcionalne JavaScript funkcije. U PHP jezik 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 tekst je (u kodiranom obliku) jedna od dvije strukture:

  • Set parova ključ:vrijednost. U raznim jezicima ovo se implementira kao objekt, zapis, struktura, rječnik, hash tablica, popis s ključevima ili asocijativni niz. Ključ može biti samo niz, vrijednost može biti samo bilo kojeg oblika.
  • Uređen skup vrijednosti. U mnogim jezicima ovo se implementira kao niz, vektor, lista ili niz.
  • To su univerzalne strukture podataka: u pravilu bilo koja moderni jezik programiranje ih podržava u ovom ili onom obliku. Legli su u JSON osnovi, budući da se koristi za razmjenu podataka između različiti jezici programiranje.

    Sljedeće strukture koriste se kao vrijednosti u JSON-u:

  • Objekt je neuređeni skup parova ključ:vrijednost u vitičastim zagradama "( )". Ključ je opisan nizom, sa znakom ":" između njega i vrijednosti. Parovi ključ-vrijednost odvojeni su zarezima.
  • Niz (jednodimenzionalan) je uređen skup vrijednosti. Niz je u uglatim zagradama "". Vrijednosti su odvojene zarezima.
  • Vrijednost može biti niz s dvostrukim navodnicima, broj, objekt, niz ili jedan od literala: istina, laž ili nula. Da. strukture mogu biti ugniježđene jedna u drugu.
  • Niz je uređen skup od nula ili više Unicode znakova, zatvorenih u dvostruki navodnici. Znakovi se mogu specificirati korištenjem izlaznih nizova koji počinju obrnutom kosom crtom "\".

    Niz je vrlo sličan istoimenom tipu podataka u jezicima C i Java. Broj je također vrlo sličan C ili Java broju, osim što koristi samo decimalni format. Razmaci se mogu umetnuti između bilo koja dva sintaktička elementa.

  • Sljedeći primjer prikazuje JSON prikaz objekta koji opisuje osobu. Objekt ima string polja za ime i prezime, objekt koji opisuje adresu i niz koji sadrži popis telefonskih brojeva.

    Glavne metode za rad s JSON-om u JavaScriptu su:

    • JSON.parse - čita objekte iz niza u JSON formatu.
    • JSON.stringify - pretvara objekte u niz u JSON formatu, koristi se kada trebate prenijeti podatke preko mreže iz JavaScripta.
    1. Uvod u metodu JSON.parse

    Kreirajmo osnovnu Tizen web aplikaciju i nazovimo je json1.

    Uđimo u datoteku index.html sljedeći kod:


    Riža. 27.2.

    Promijenimo malo naš kod skripte:

    promjenljivi brojevi = ""; brojevi = JSON.parse(brojevi); dokument.pisati(brojevi);


    Riža. 27.3.

    Pogledajmo jedan zanimljiviji slučaj:

    var user = "( "name": "Vasya", "age": 35, "isAdmin": true, "friends": ["Misha","Masha","Grisha","Gulshat"] )"; korisnik = JSON.parse(korisnik); strMessage = "Ime: " + user.name + "
    " + "Dob: " + user.age + "
    " + "Administrator: " + user.isAdmin + "
    " + "Prijatelji: " + user.friends + "
    "; document.write(strMessage);


    Riža. 27.4. 2. Stvorite objekt iz JSON niza

    Ovaj primjer je preuzet s http://www.w3schools.com/js/js_validation.asp. Kreirajmo projekt json2. U datoteci indeks.tml Unesite sljedeći kod.

    Stvori objekt iz JSON niza var text = "("zaposlenici":[" + "("firstName":"John","lastName":"Doe" )," + "("firstName":"Anna","lastName ":"Smith" )," + "("firstName":"Peter","lastName":"Jones" )])"; obj = JSON.parse(tekst); var n=obj.employees.length; strPoruka=""; for(i=0;i "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4,5,6,7)) ; // Određivanje opcija za kontekst toka $options = array ("http" => array ("method" => "POST", "header" => "Content-Type: application/json; charset=utf-8\r \ n", "content" => json_encode($request)))); // Stvaranje konteksta toka $context = stream_context_create($options); // Slanje podataka i dobivanje rezultata echo file_get_contents("http://test.ru/json.php", 0, $context);

    Ovdje se koristi improvizirana struktura podataka koja se sastoji od početnog i završnog datuma, kao i niza brojeva nekih uvjetnih zapisa. Imajte na umu da u zaglavlju zahtjeva Vrsta sadržaja naveden je tip “application/json”.

    Primanje podataka

    Za primanje poslanih podataka na gore opisani način potrebno je očitati podatke iz ulaznog toka “ php://unos”.

    Funkcije koje se koriste za prihvaćanje podataka:

    • miješani json_decode (string json [, bool assoc = false [, int depth = 512 [, int options = 0 ]]])

      Ova funkcija dekodira niz u JSON formatu. Parametar json navodi niz za dekodiranje. Parametar assoc kontrolira hoće li se vraćeni podaci pretvoriti u asocijativni niz. Ako postoji takva potreba, tada morate navesti kao vrijednost ovog parametra pravi. 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(prema zadanim postavkama veliki cijeli brojevi pretvaraju se u brojeve s pomičnim zarezom (float))

    • fopen resursa (naziv datoteke niza, način niza [, bool use_include_path [, kontekst resursa ]])

      Otvara datoteku i vraća njen handle. Parametar naziva datoteke je imenovani resurs koji ukazuje na datoteku. Parametar mode specificira vrstu pristupa datoteci (pogledajte tablicu s popisom mogućih načina za fopen()). Slijede dvije izborni parametar to su: use_include_path i context . Prilikom postavljanja use_include_path na pravi ili 1 i pod uvjetom da je imenovani resurs postavljen na relativni put, datoteka koja se otvara bit će pretraživana na popisu direktorija koje koriste funkcije uključiti I zahtijevati. U praksi se ovaj parametar praktički ne koristi. Kontekstni parametar koristi se za određivanje konteksta izvora.

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

      Ova vam funkcija omogućuje dobivanje sadržaja streama kao niza. Ručka parametar je resurs niti. Parametar maxlen sadrži maksimalan iznos bajt za čitanje. Zadano je postavljeno na -1, što označava da su svi podaci primljeni. Parametar pomaka sadrži pomak od kojeg će početi čitanje podataka. Standardno je također postavljeno na -1, što znači da će se čitanje vršiti s početne pozicije.

    Ispod je primjer primanja podataka u JSON formatu na strani poslužitelja:

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

    Rezultirajuća struktura podataka:

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

    Napomena: potrebno je uzeti u obzir činjenicu da za rad s JSON formatom podaci moraju biti kodirani u utf-8.

    JSON daje konstante za funkciju json_encode().

    JSON_HEX_TAG (cijeli broj) Svi su kodirani u \u003C i \u003E. Dostupan od PHP 5.3.0.
    JSON_HEX_AMP (cijeli broj) Svi & su kodirani u &. Dostupan od PHP 5.3.0.
    JSON_HEX_APOS (cijeli broj) Svi ' znakovi su kodirani u \u0027. Dostupan 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) Vrati objekt umjesto polja kada se koristi neasocijativno polje. Ovo je korisno kada program ili kod koji prima očekuje objekt ili je niz prazan. Dostupan od PHP 5.3.0.
    JSON_NUMERIC_CHECK (cijeli broj) Kodiranje nizova koji sadrže brojeve kao brojeve. Dostupan od PHP 5.3.3.
    JSON_BIGINT_AS_STRING (cijeli broj) Kodira velike cijele brojeve kao njihove ekvivalente niza. Dostupan od PHP 5.4.0.
    JSON_PRETTY_PRINT (cijeli broj) Koristiti znakovi razmaka u vraćenim podacima kako biste ih formatirali. Dostupan od PHP 5.4.0.
    JSON_UNESCAPED_SLASHES (cijeli broj) Ne bježi /. Dostupan od PHP 5.4.0.
    JSON_UNESCAPED_UNICODE (cijeli broj) Nemojte kodirati višebajtove Unicode znakovi(prema zadanim postavkama kodirani su kao \uXXXX). Dostupan od PHP 5.4.0.

    Popis 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 duljinu. Ako datoteka ne postoji, pokušava je stvoriti.
    'w+' Otvara datoteku za čitanje i pisanje; postavlja pokazivač na početak datoteke i skraćuje datoteku na nultu duljinu. Ako datoteka ne postoji, pokušava je stvoriti.
    'a' Otvara datoteku samo za pisanje; postavlja pokazivač na kraj datoteke. Ako datoteka ne postoji, pokušava je stvoriti.
    'a+' Otvara datoteku za čitanje i pisanje; postavlja pokazivač na kraj datoteke. Ako datoteka ne postoji, pokušava je stvoriti.
    'x' Stvara i otvara samo za pisanje; postavlja pokazivač na početak datoteke. Ako datoteka već postoji, poziv fopen() neće uspjeti, vratiti će FALSE i izbaciti pogrešku E_WARNING. Ako datoteka ne postoji, pokušat će je stvoriti. Ovo je ekvivalentno specificiranju zastavica O_EXCL|O_CREAT za interni open(2) sistemski poziv.
    'x+' Stvara i otvara za čitanje i pisanje; inače ima isto ponašanje kao 'x'.
    'c' Otvara datoteku samo za pisanje. Ako datoteka ne postoji, kreira se. Ako datoteka postoji, tada nije skraćena (za razliku od 'w'), a pozivanje ove funkcije ne uzrokuje pogrešku (kao u slučaju 'x'). Pokazivač datoteke bit će postavljen na početak datoteke. Ovo može biti korisno ako želite zaključati datoteku (pogledajte flock()) prije nego što je promijenite, budući da korištenje 'w' može skratiti datoteku prije nego što je zaključavanje stečeno (ako želite skratiti datoteku, možete koristiti ftruncate () funkcija nakon zahtjeva za zaključavanje).
    'c+' Otvara datoteku za čitanje i pisanje; inače ima isto ponašanje kao 'c'.

    Najbolji članci na temu