Decodare abreviere Json. Ce este JSON? Folosind JSON în Ajax

O lecție care analizează ce este JSON și ce avantaje are față de alte formate de date.

Înțelegerea JSON

JSON (JavaScript Object Notation) este format text reprezentarea datelor în notația obiect JavaScript.

Aceasta înseamnă că datele din JSON sunt organizate în același mod ca într-un obiect JavaScript. Dar spre deosebire de cel mai recent formatÎnregistrările JSON au câteva particularități, care vor fi discutate puțin mai târziu.

JSON este de obicei folosit împreună cu AJAX, astfel încât serverul să poată transmite date într-o formă convenabilă unui script JavaScript, care le va afișa apoi pe pagină.

Structura formatului JSON

Cei care sunt familiarizați cu procesul de creare a obiectelor în JavaScript nu vor vedea nimic nou în structura formatului JSON. Acest lucru se datorează faptului că structura JSON se potrivește cu structura obiectului JavaScript cu unele restricții.

Este mai ușor să te gândești la JSON ca la un container de elemente. Fiecare element dintr-un astfel de container este o unitate structurală constând dintr-o cheie și o valoare.

În acest caz, valoarea este direct legată de cheie și formează așa-numita pereche cheie-valoare. Pentru a obține o valoare într-un astfel de obiect, trebuie să cunoașteți cheia acestuia. Sintactic, astfel de date în JSON sunt scrise după cum urmează:

În intrarea de mai sus, puteți vedea că cheia este separată de valoare cu două puncte (:). În acest caz, cheia din obiectul JSON trebuie să fie inclusă în ghilimele duble. Aceasta este prima caracteristică a JSON care îl deosebește de un obiect JavaScript. pentru că într-un obiect JavaScript, cheia (proprietatea obiectului) nu trebuie să fie cuprinsă între ghilimele duble.

De exemplu, o structură de obiect care este validă din perspectiva JavaScript, dar nu este validă din perspectiva JSON:

Var person = (nume: „John”; ) // obiect JavaScript

Atenție: încercați să setați numele cheii în așa fel încât să nu complice accesul la date, de ex. atunci când compuneți un nume, este de preferat să folosiți notația camel case sau să folosiți un caracter de subliniere ("_") pentru a conecta cuvinte.

Valoarea cheii în JSON poate fi scrisă în unul dintre următoarele formate: șir (șir), număr (număr), obiect (obiect), matrice (matrice), boolean (valoare booleană adevărată sau falsă), nul (valoare specială JavaScript) .

aceasta a doua limitare în JSON, deoarece un obiect JavaScript poate conține orice tip de date, inclusiv o funcție.

Var person = ("nume": "Ioan"; "setName": function() ( console.log(this.name); ) ) // obiect JavaScript

O virgulă (,) este folosită pentru a separa un element (perechea cheie-valoare) de altul.

De exemplu, luați în considerare un JSON format din tipuri variate date.

Atenție: formatul de reprezentare a datelor JSON nu permite utilizarea comentariilor în structura sa.

Lucrul cu JSON în JavaScript

Spre deosebire de un obiect JavaScript, JSON este un șir.

De exemplu:

// de exemplu, variabila personData conține un șir care este JSON var personData = "("name":"Ivan","age":37,"mother":("name":"Olga","age": 58),"copii":["Masha","Igor","Tanya"],"căsătorit": adevărat,"câine": nul)";

Lucrul cu JSON se desfășoară de obicei în două direcții:

  1. Analiza este traducerea unui șir care conține JSON într-un obiect JavaScript.
  2. Conversia unui obiect JavaScript într-un șir JSON. Cu alte cuvinte, această acțiune face inversul analizei.

Se analizează JSON

Analiza JSON, de ex. traducerea unui șir JSON într-un obiect JavaScript se face folosind metoda eval() sau parse().

Folosind metoda eval():

// variabila persoană este un obiect JavaScript care se obține prin executarea codului JSON (șir) var person= eval("("+personData+")");

Folosind metoda JSON.parse():

// variabila person este un obiect JavaScript care se obține prin parsarea unui șir JSON var person = JSON.parse(personData);

Conversia unui obiect JavaScript într-un șir JSON

Traducerea unui obiect JavaScript într-un șir JSON se face folosind metoda JSON.stringify(). Această metodă face opusul metodei JSON.parse().

Var personString = JSON.strigify(persoana);

Beneficiile formatului JSON

Formatul de reprezentare a datelor JSON are următoarele avantaje:

  • metode convenabile și rapide pentru conversia (parsarea) unui șir JSON într-un obiect JavaScript și invers;
  • structură de date clară și simplă;
  • dimensiune foarte mică în comparație cu alte formate de date (de ex. XML). Acest lucru se datorează faptului că formatul JSON conține formatarea minimă posibilă, de exemplu. la scrierea lui se folosesc doar câteva caractere speciale. Acesta este un avantaj foarte important, deoarece datele prezentate în format JSON se vor încărca mai repede decât dacă ar fi prezentate în alte formate.

Datorită faptului că acest format are o mulțime de avantaje, a devenit folosit nu numai în JavaScript, ci și în multe alte limbi, precum C, Ruby, Perl, Python, PHP etc.

Comparație între formatele JSON și XML

Formatul JSON are următoarele avantaje față de formatul XML:

  1. La transmiterea unor date, dimensiunea JSON va fi semnificativ mai mică decât dimensiunea XML.
  2. JSON are metode mai convenabile pentru conversia în structuri Date JavaScript decât XML.
  3. JSON este mai ușor de creat decât XML.

Lucrul cu date JSON după parsare se face ca și cu un obiect JavaScript.

//JSON var personData = "("nume":"Ivan","varsta":37,"mama":("nume":"Olga","varsta":58),"copii":["Masha" ,"Igor","Tanya"],"căsătorit": adevărat,"câine": nul)"; //JavaScript person object var person = JSON.parse(personData);

Luați în considerare punctele principale:

//obține valorile cheii (proprietății) nume person.name; persoană[„nume”]; //obține valorile numelui cheii (proprietății), aflate în obiectul mamă persoană.mamă.nume; //șterge elementul de vârstă șterge(persoană.vârstă) //adaugă (sau actualizează) cheie (proprietate) person.eye = "maro"; //când lucrați cu matrice, trebuie să utilizați metode concepute pentru a funcționa în mod specific cu matrice //eliminați 1 element din matrice (metoda splice) person.children.splice(1,1) //adăugați un element în matrice (metoda push ) persoană.copii.împinge(„Kate”);

Pentru a itera elementele dintr-un obiect, puteți utiliza o buclă for..in:

Pentru (cheie în persoană) ( dacă (person.hasOwnProperty(cheie)) ( //cheie = cheie //valoare = persoană console.log("Cheie = " + cheie); console.log("Valoare = " + persoană) ; ) // dacă obiectul persoană are o cheie (dacă persoana are o proprietate cheie) ) // repetă peste toate cheile (proprietățile) din obiect

Puteți utiliza următoarea buclă pentru a itera elementele unui tablou:

Pentru (var i=0; i

), și între serverele în sine (interfețe HTTP programatice). Formatul JSON este, de asemenea, potrivit pentru stocarea structurilor dinamice complexe în baze de date relaționale sau cache de fișiere.

Deoarece formatul JSON este un subset al sintaxei limbajului JavaScript, acesta poate fi deserializat rapid cu funcția încorporată eval(). În plus, este posibil să inserați funcții JavaScript complet funcționale. În PHP, începând cu versiunea 5.2.0, suportul JSON a fost inclus în nucleu sub forma funcțiilor json_decode() și json_encode(), care convertesc ele însele tipurile de date JSON în tipurile PHP corespunzătoare și invers.

Sintaxă

JSON este construit pe două structuri:

  • Un set de perechi cheie/valoare. În diferite limbi, acest lucru este implementat ca un obiect, înregistrare , structură , dicționar , tabel hash , listă cu chei sau matrice asociativă . Cheia poate fi doar un șir, valoarea poate fi orice formă.
  • Un set numerotat de valori. În multe limbi, acest lucru este implementat ca matrice, vector , listă sau secvență .

Acestea sunt structuri de date generice. Teoretic, toate limbajele de programare moderne le susțin într-o formă sau alta. Deoarece JSON este folosit pentru schimb de dateîntre diferite limbaje de programare, este logic să o construim pe aceste structuri.

În JSON, sunt utilizate următoarele forme:

  • Un obiect este un set neordonat de perechi nume/valoare cuprinse între acolade ( ). Există un simbol între nume și valoare ": " , iar perechile nume/valoare sunt separate prin virgule.
  • matrice(unidimensional) este un set de valori care au numere ordinale (indici). Matricea este cuprinsă între paranteze drepte. Valorile sunt separate prin virgule.
  • Sens poate şirîntre ghilimele duble, număr, sens Adevărat sau fals, obiect, matrice, sau valoarea nul. Aceste structuri pot fi imbricate unele în altele.
  • Linia este un set ordonat de zero sau mai multe caractere unicode, cuprinse între ghilimele duble, folosind secvențe de escape care încep cu o bară oblică inversă. Caracterele sunt reprezentate printr-un șir simplu.
  • Nume este o sfoară.

Linia foarte asemănător cu șir în limbi și Java. Număr este, de asemenea, foarte asemănător cu un număr C sau Java, cu excepția faptului că este folosit doar formatul zecimal. Pot fi introduse spații între oricare două caractere.

Următorul exemplu arată o reprezentare JSON a unui obiect care descrie o persoană. Obiectul are şir câmpuri pentru nume și prenume, un obiect care descrie o adresă și o matrice care conține o listă de numere de telefon.

( „firstName” : „Ivan” , „lastName” : „Ivanov” , „adresă” : ( „streetAddress” : „Autostrada Moscova, 101, ap. 101”, „oraș” : „Leningrad” , „cod postal” : 101101 ), „numere de telefon” : [ „812 123-1234” , „916 123-4567” ] )

În XML, o astfel de structură ar arăta cam așa:

> > Ivan > > Ivanov > > > Autostrada Moscova, 101, ap. 101 > > Leningrad > > 101101> > > > 812 123-1234> > 916 123-4567> > >

„Autostrada Moscova, 101, ap. 101” city ​​​​="Leningrad" postalCode ="101101" /> > > 812 123-1234> > 916 123-4567> > >

Comparație cu YAML

Atât din punct de vedere funcțional, cât și din punct de vedere sintactic, JSON este un subset al limbajului YAML. În special, specificația YAML 1.2 afirmă că „orice fișier JSON este un fișier YAML valid”. Cel mai comun parser YAML este capabil să gestioneze și JSON. Specificația YAML anterioară 1.2 nu acoperea complet JSON, în primul rând din cauza lipsei suportului nativ UTF-32 în YAML, precum și a cerinței de spațiu după delimitatorul virgulă. În plus, specificația JSON a inclus comentarii de stil /* */.

Cea mai importantă diferență dintre YAML este un set de extensii de sintaxă care nu au echivalent în JSON:

Relațional: YAML acceptă date relaționale: într-un document YAML, puteți face referire la o ancoră întâlnită mai devreme în fișier/flux. În acest fel, pot fi exprimate structuri recursive. Extensibil: YAML acceptă tipuri de date extensibile în afară de primitive (adică șiruri, numere, boolean). Blocuri: Sintaxa blocurilor indentate este disponibilă în YAML; vă permite să descrieți date structurate fără a utiliza caractere suplimentare (toate tipurile de paranteze, ghilimele etc.).

schema json

Schema JSON este unul dintre limbile pentru descrierea structurii unui document JSON. Utilizează sintaxa JSON. Bazat pe conceptele XML Schema, RelaxNG, Kwalify. Schema JSON este un limbaj de auto-descriere: atunci când este utilizat pentru a procesa date și a descrie valabilitatea acestora, pot fi utilizate aceleași instrumente de serializare/deserializare.

Folosind JSON în Ajax

Următorul exemplu de cod Javascript arată cum un browser poate folosi XMLHttpRequest pentru a solicita un obiect JSON de la server (partea server a programului este omisă; ar trebui să conțină codul care trimite date în formatul șirului JSON ca răspuns la solicitările URL).

Var the_obiectul; var http_request = new XMLHttpRequest() ; http_request.open( „GET” , url, adevărat ); 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( „A apărut o problemă cu adresa URL”.) ; ) http_request = null ; ) ) ;

observa asta exemplu dat Utilizarea XMLHttpRequest nu este universală pentru toate browserele (pentru browserele bazate pe Internet Explorer , Opera , Safari și Mozilla , ar trebui să existe unele diferențe în cod). Posibilitățile de utilizare a XMLHttpRequest sunt limitate din cauza aceleiași politici de origine: URL-ul de răspuns pentru cerere trebuie să fie în același domeniu DNS cu serverul care găzduiește pagina care solicită răspunsul. Alternativ, este utilizată o abordare JSONP, care implică utilizarea unui apel de funcție codificat transmis între client și server, astfel încât clientul să poată descărca date codificate JSON de pe domenii terțe și să notifice apelantul de finalizare, deși acest lucru introduce unele riscuri de securitate și cerințe suplimentare de server.

Alternativ, în codul paginii, puteți utiliza elemente