Date Json printr-un formular obișnuit. Deschiderea fișierelor JSON

Variabilele, matricele și obiectele sunt o formă familiară și convenabilă de reprezentare a datelor. Se obișnuiește să descrie datele în limbajul browserului JavaScript, care nu este necesar în limbajul serverului PHP. Formatul JSON vă permite să le generalizați într-un întreg și să nu vă concentrați pe limbajul de programare. În acest caz, datele sunt convertite în perechi: „nume = valoare”. Valoarea în fiecare dintre ele poate fi și o colecție de astfel de perechi.

Se obișnuiește să se asocieze JSON cu acolade, iar aceasta din urmă este destul de justificată, deoarece formatul JSON = Object Notation JavaScript. S-au schimbat multe în ultimii ani deosebit de dinamici. Ceea ce a fost creat cu un anumit scop a adus adesea rezultate neașteptate sau a deschis noi orizonturi.

Schimb de date: browser - server

Tehnologia AJAX a devenit tradițională, reîmprospătarea obișnuită a paginii în întregime a încetat să fie popular. Vizitatorul, deschizând site-ul, inițiază o serie de schimburi parțiale de date, atunci când anumite pagini se schimbă doar în locul care este relevant.

Se crede că apariția JSON este asociată cu utilizarea AJAX, dar, de fapt, asociația și notația obiectului acesteia (caracteristicile sintaxei pentru descrierea și utilizarea obiectelor) sunt mult mai legate de JSON decât de schimbul de date între browser și Server.

Deoarece conținutul paginilor site-urilor moderne a devenit cu adevărat „masiv” (volumeric), eficiența formatului pentru schimbul de date a devenit de o importanță deosebită. Acest lucru nu înseamnă că JSON a devenit o nouă reprezentare a datelor, dar faptul că a fost mult timp un element de sintaxă JavaScript este semnificativ.

Folosirea chirilicului în denumirea variabilelor este un fenomen foarte neașteptat (prostii), dar funcționează în cele mai recente versiuni de Chrome, Firefox și chiar Internet Explorer 11.

Chirilic și JSON

Desigur, nu ar trebui să folosiți acest fenomen complet neașteptat, amintindu-vă cât de ușor se transformă în krakozyabry valorile variabilelor scrise cu litere rusești: ce putem spune despre nume, în special despre cele externe.

Este îndoielnic că inițiativa în nume chirilice va fi susținută de mediul extern al browserului, cu care acesta trebuie să se ocupe constant. Dar acest fapt merită atenție pentru simplul motiv că formatul JSON este capacitatea de a scrie nume și valori în orice mod dorește dezvoltatorul. Acest lucru este important, deoarece în fiecare problemă descrierea domeniului de aplicare, așa cum o necesită, simplifică foarte mult depanarea și reduce numărul de erori.

Nu contează pe ce s-a bazat inovația sintactică - JSON, important este că a dat un drept legal și o oportunitate reală de a se potrivi: „orice nume = orice valoare”.

Trebuie să aducem un omagiu limbajului JavaScript: ceea ce este furnizat de sintaxă nu obligă dezvoltatorul și nu-i impune nimic. Dezvoltatorul folosește în mod liber sintaxa limbajului pentru formarea optimă a modelului de date și algoritmul pentru utilizarea lor.

PHP și JSON

Acceptând date în format JSON, serverul (prin PHP, în special) oferă posibilitatea de a le procesa ca atare și de a returna rezultatul înapoi în browser într-un format similar. PHP Source Array:

  • $cJSON = matrice ("a" => "alfa", "b" => "beta", "g" => "gamma").

Convertirea în format JSON pentru trecerea la browser:

  • $cJS = json_encode($cJSON).

Rezultat:

  • ("a":"alfa","b":"beta","g":"gamma").

Cuibarea prezentată în fotografie este permisă.

Aici, matricea formată a fost adăugată cu un nou element „în sine” cu index automat „0” și apoi din nou cu indicele specificat „z”.

Json_decode() convertește un șir JSON într-o matrice PHP. Rezultate similare pot fi obținute prin manipularea funcțiilor și explode(). În unele cazuri, această opțiune este de preferat.

nivelul de cuibărit

Elementele pot fi imbricate unul în celălalt atât pe partea browserului, cât și pe partea serverului. În practică, formatul JSON (descris de RFC 4627) oferă peste 4 niveluri de imbricare, dar această capacitate nu trebuie abuzată.

Cel mai bine este să nu depășiți niciodată o suficiență rezonabilă, acesta face codul ușor de citit și îl face mai ușor de depanat și de înțeles pentru alți dezvoltatori.

JSON este de obicei menționat ca structuri de date care sunt mai simple decât XML, ușor de înțeles atât pentru oameni, cât și pentru computere. Acest lucru este valabil atunci când cantitatea de date este mică și dezvoltatorul a ales corect nivelul de imbricare. În toate celelalte cazuri, este dificil să numărați numărul de paranteze și să înțelegeți atât din partea browserului, cât și pe partea serverului.

Fișiere JSON

Utilizarea JSON în practică nu este adesea limitată la un șir scurt accesibil percepției. Orice construcții de date sunt întotdeauna pragmatice. În același timp, JSON poate fi folosit eficient atât în ​​datele reale ale sarcinii (personalul întreprinderii), cât și pentru implementarea datelor temporare (cache-ul obiectelor).

Statul întreprinderii și formatul JSON: un exemplu

De obicei, o înregistrare despre o persoană este un nume de familie, nume, patronim, anul nașterii, specialitatea, educația, ... și câteva valori mai simple. Chiar și în companiile deosebit de solicitante, un record despre o persoană nu va depăși o duzină sau două domenii. Aceasta este perceptivă și poate fi plasată într-un rând de bază de date.

Dacă o companie angajează mai mulți oameni, acesta este un lucru, dar dacă sunt zeci de mii, acesta este cu totul altul. Puteți continua să utilizați baza de date, dar stocarea acesteia ca fișier pare mai practică și mai ușor de utilizat.

JSON este un fișier text simplu. Cazul cu personalul, bine. Îl poți citi oricând. Deschideți și editați este disponibil și în orice editor de text care nu are obiceiul de a adăuga informațiile de serviciu la conținutul fișierului. În general, *.json este text pur atât în ​​interiorul browserului, cât și în interiorul fișierului - un șir.

Fotografia arată memoria cache a obiectului care formează imaginea, un exemplu.

Acesta este un exemplu de conținut al unui fișier generat de un site web care oferă imprimare 3D color pe căni și ceramică. Desigur, având un astfel de format JSON, a decide cum să-l deschideți este cu adevărat problematic. Cu toate acestea, în acest caz și în cazuri similare, nu există nicio problemă la citirea fișierului: PHP citește fișierul, îl analizează și îl transmite browserului. Datele modificate de vizitator sunt returnate serverului și scrise înapoi.

În acest caz de utilizare, fișierul acționează ca o variabilă care este stocată în afara codului. Dacă este necesar, variabila primește o valoare din fișier, iar dacă este modificată de către vizitator în dialogul oferit de site, atunci toate modificările vor fi înregistrate așa cum sunt. Nu este nevoie să citiți și să verificați conținutul fișierului.

JSON este adesea folosit pentru a stoca și a utiliza informații de serviciu - acesta nu este un tabel de personal, nici dezvoltatorul, nici vizitatorul site-ului nu trebuie să îl vadă.

XML și JSON

„Există un timp pentru toate” este o cunoaștere clasică, acceptată ca axiomă chiar înainte de apariția programării. „Nimic nu apare chiar așa” - asta a fost și înainte ca omul să scrie primul program inteligibil într-un limbaj artificial.

Formatele de date apar dintr-o nevoie reală și se bazează pe cunoștințele acumulate. HTML are propriul său mod, XML are propriul său mod, iar JSON este logica obiect JavaScript extinsă la alte limbi. A compara unul cu celălalt nu este cel mai bun lucru de făcut. Fiecare a lui.

XML se descurcă de minune sarcinilor sale și în mod clar nu va rămâne în istorie. Și JSON a fost folosit până în 2006, doar că nu fiecare dezvoltator a considerat că este de datoria lui să declare anumite opțiuni pentru prezentarea datelor sale.

Au existat cazuri în practică când au fost scrise programe în BASIC care nu foloseau JSON ca atare, ci perechile nume = valoare stocate perfect și le-au pus la dispoziție pentru algoritmii potriviți la momentul potrivit.

Caractere speciale ("`", "~", "|", ...) și formate de date

Obiceiul de a lucra cu tablouri și obiecte asociative în JavaScript face ca utilizarea JSON să fie naturală și convenabilă. Acesta este într-adevăr un format grozav, dar capacitatea de a împărți și uni, manipulând șiruri și matrice, are rădăcini mult mai profunde.

Funcțiile JavaScript join/split și PHP implode/explode vă permit să utilizați convenabil și eficient atât formatele de date XML, cât și JSON, precum și propria versiune. Acesta din urmă este adesea mai bun, în timp ce primele două sunt ideale pentru cazurile generale de utilizare. Dacă informațiile sunt transferate către un alt dezvoltator, server, fișier sau bază de date, este mai bine să nu fie găsite XML și JSON. Toată lumea lucrează cu ei, așa că transmiterea/recepția informațiilor nu necesită comentarii.

Folosind JSON în Android

Citirea și scrierea datelor în format JSON în Android nu este doar o normă, dar există multe obiecte care sunt orientate să funcționeze cu acest format special de date.

Folosește formatul JSON. Poate că acest lucru este adevărat, dar întrebarea nu este în fenomenalitatea rețelelor sociale, ci în faptul că prezentarea informațiilor în formatul „nume = valoare” este într-adevăr convenabilă atât pentru programare, cât și pentru utilizare. Spre deosebire de „XML” strict și notoriu, acesta este un format cu adevărat prietenos cu oamenii.

Matrice asociative

S-a întâmplat ca variabilele să fie descrise (JavaScript) sau cel puțin să indice valoarea inițială (PHP). În ambele cazuri, variabila își poate schimba tipul foarte ușor. Limbajul realizează această transformare automat dacă este necesar.

Dar de ce nu ar trebui variabila să-și schimbe și numele, să apară în timpul execuției algoritmului și să dispară atunci când nu mai este necesară? Matricele asociative rezolvă această problemă, dar atunci când sunt utilizate astfel de variabile relativ dinamice, numele matricei și constructele de sintaxă asociate vor urma acolo unde sunt aplicate.

Această împrejurare este deosebit de pronunțată în PHP, dar puteți suporta acest lucru, ca, totuși, cu simbolul „$” din numele variabilei și combinația „$this->” din interiorul obiectului. Programând în același timp în JavaScript și PHP, la început chiar te întrebi cum este totul diferit, dar apoi totul devine atât de familiar și natural...

Matrice asociativă -> JSON

În acest exemplu, un document *.docx este creat folosind biblioteca PHPOffice/PHPWord, iar matricea aProperties conține proprietățile documentului (autor, companie, titlu, categorie, data creării...).

A doua matrice conține date de pagină:

  • orientare (peisaj sau normal);
  • dimensiuni pe verticală și orizontală;
  • umplutură (margini stânga, sus, jos, dreapta);
  • anteturi și subsoluri.

Documentul este generat pe serverul unde este instalată biblioteca PHPOffice/PHPWord. Site-ul prevede gestionarea valorilor acestor matrice folosind JavaScript. Rezultatul în format JSON este returnat înapoi la server și folosit în algoritmi PHP, în construcțiile sale, adică în tablouri.

Variabile dinamice

Formatul JSON rezolvă problema variabilelor dinamice. Aici puteți crea, modifica și șterge variabile fără dezordine sintactică inutilă. Arată bine și este folosit în JavaScript.

În acest exemplu, funcția GetOjInfo() preia numele și valoarea valorii din obiect. Inițial, obiectul șir JSON alocat variabilei ojInfo are trei elemente: Nume, vârstă și muncă. Puțin mai târziu, este adăugată variabila Status.

După prima instrucțiune de ștergere, linia ojInfo pierde elementul age, după a doua ștergere - elementul de lucru. Dacă presupunem că această linie este o colecție de variabile care au o anumită semnificație, atunci folosind JSON puteți de fapt crea, modifica și șterge oricare dintre seturile lor în afara câmpului operațional (sintaxa) descrierii și procesării limbajului JavaScript.

Formatul JSON nu a fost conceput pentru această opțiune, dar acest lucru este posibil, practic și convenabil.

ECMA-262 1999), formatul este considerat independent de limbaj și poate fi utilizat cu aproape orice limbaj de programare. Pentru multe limbi, există un cod gata făcut pentru crearea și procesarea datelor în format JSON.

Utilizare

Datorită conciziei sale în comparație cu XML , formatul JSON poate fi mai potrivit pentru serializarea structurilor complexe. Dacă vorbim de aplicații web, în ​​acest sens, este potrivit în sarcinile de schimb de date atât între browser și server ( AJAX ), cât și între servere în sine ( interfețe software HTTP).

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 limbajul 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ă

Textul JSON este (codificat) una dintre cele două structuri:

  1. Set cupluri valoare cheie. În diferite limbi, acesta este implementat ca obiect, înregistrare, structură, dicționar, tabel hash, listă cu cheie sau matrice asociativă. Cheia poate fi doar un șir, valoarea poate fi orice formă.
  2. Un set ordonat de valori. În multe limbi, acest lucru este implementat ca o matrice, vector, listă sau secvență.

Acestea sunt structuri de date universale: de regulă, orice modern limbaj de programare sprijiniți-i într-un fel sau altul. Ei au stat la baza JSON, deoarece este folosit pentru a face schimb de date între diferite limbaje de programare.

Următoarele structuri sunt utilizate ca valori în JSON:

  1. Un obiect este un set neordonat de perechi cheie:valoare cuprinse între acolade „( )”. Cheia este descrisă printr-un șir, între ea și valoare există un caracter „:”. Perechile cheie-valoare sunt separate între ele prin virgule.
  2. O matrice (unidimensională) este un set ordonat de valori. Matricea este cuprinsă între paranteze drepte „”. Valorile sunt separate prin virgule.
  3. Valoarea poate fi un șir cu ghilimele duble, un număr, un obiect, o matrice, unul dintre literalele: adevărat, fals sau nul. Acea. Structurile pot fi imbricate unele în altele.
  4. Un șir este un set ordonat de zero sau mai multe caractere unicode cuprinse între ghilimele duble. Caracterele pot fi specificate folosind secvențe de escape care încep cu o bară oblică inversă „\”.

    Un șir este foarte asemănător cu tipul de date cu același nume în C și Java. Un 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 inserate spații între oricare două elemente de sintaxă.

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

Principalele metode de lucru cu JSON în JavaScript sunt:

  • JSON.parse - Citește obiecte dintr-un șir în format JSON.
  • JSON.stringify - transformă obiectele într-un șir JSON, folosit atunci când trebuie să transferați date din JavaScript prin rețea.

1. Introducere în metoda JSON.parse

Să creăm o aplicație web de bază Tizen și să o numim json1.

Intra in fisier index.html următorul cod:


Orez. 27.2.

Să ne schimbăm puțin codul de script:


Orez. 27.3.

Să luăm în considerare un caz mai interesant:


Orez. 27.4.

2. Creați un obiect dintr-un șir JSON

Acest exemplu a fost preluat de la http://www.w3schools.com/js/js_validation.asp. Să creăm un proiect json2. În dosar index.tml introduceți următorul cod.

Creați obiect din șirul JSON


Orez. 27.5.

3. Lucrul cu metoda JSON.parse

Următorul exemplu folosește JSON.parse pentru a converti un șir JSON într-un obiect (proiect json3).

Tizen Web IDE - Tizen - Aplicație de bază Tizen


Orez. 27.6.

4. Lucrul cu funcții de revigorare

Funcția de revigorare este adesea folosită pentru a converti reprezentarea JSON a șirurilor de date ale Organizației Internaționale pentru Standardizare (ISO) în obiecte Data Universal Time (UTC). Acest exemplu folosește JSON.parse pentru a deserializa un șir de date ISO. Funcția dateReviver returnează obiecte Date pentru membri formatați ca șiruri de date ISO. Iată un exemplu ușor modificat preluat de la https://msdn.microsoft.com/en-us/library/cc836466%28v=VS.94%29.aspx?f=255&MSPPError=-2147217396 . Să creăm un proiect json4.

Tizen Web IDE - Tizen - Aplicație de bază Tizen

JSON (JavaScript Object Notation) este un format pentru schimbul de date textuale. Permițându-vă să transferați structuri complexe de date într-o formă serializată. Acest format de transfer de date a devenit atât de popular încât, începând cu versiunea 5.2.0 a nucleului PHP, au fost adăugate funcții pentru procesarea datelor în acest format. Și asta înseamnă că nu este nevoie să conectați extensii suplimentare. Formatul de date JSON este bine înțeles de un om. În plus, acest tip de schimb de date este utilizat pe scară largă între diverse servicii API. Și cu dezvoltarea corectă a algoritmilor pentru schimbul de informații, puteți obține o creștere a vitezei foarte mare decât, de exemplu, atunci când lucrați cu date în format XML.

Trimiterea datelor

Există două moduri de a trimite date în format JSON: formați o solicitare GET sau POST cu date codificate situate în variabila GET sau POST sau plasați datele în corpul documentului. În practică, a doua opțiune este de obicei utilizată.

Pentru a trimite date, sunt necesare următoarele funcții:

  • şir json_encode(valoare mixtă [, opțiuni int = 0])

    Parametrul value specifică datele care trebuie codificate. Orice tip este acceptat, cu excepția tipului resursă. Parametrul opțiuni conține o mască de biți a posibilelor valori furnizate (vezi tabelul cu constantele furnizate JSON).

  • resursă stream_context_create (])

    Această funcție este destinată să creeze și să returneze un context de fir cu opțiunile specificate în parametrul opțiuni. Parametrul opțional opțional trebuie să fie de tip matrice asociativă. Inițial, este gol. Al doilea parametru opțional params trebuie să fie, de asemenea, o matrice asociativă în formatul $data['nume'] = valoare.

  • şir file_get_contents(șir nume de fișier [, bool use_include_path [, contextul resursei [, int offset [, int maxlen ]]]])

    Utilizarea acestei funcții vă permite să obțineți conținutul unui fișier ca șir. Parametrul nume de fișier este numele fișierului citit. În parametrul use_include_path, începând cu PHP 5, puteți folosi constanta FILE_USE_INCLUDE_PATH pentru a căuta un fișier în calea include. Parametrul context reprezintă resursa context creată cu funcția stream_context_create(). În cazul unei încercări nereușite de a deschide fișierul, valoarea va fi returnată. fals. Parametrul offset conține offset-ul de la care se începe citirea datelor. Parametrul maxlen specifică dimensiunea datelor primite.

    Notă: offset-ul nu este specificat atunci când lucrați cu fire de execuție la distanță.

Următorul este un exemplu de trimitere a datelor în format JSON:

// Date de trimis $request = array("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4 ,5,6,7)); // Specificarea opțiunilor pentru contextul fluxului $options = array ("http" => matrice ("method" => "POST", "header" => "Content-Type: application/json; charset=utf-8\r \ n", "conținut" => json_encode($request))); // Creați un context de flux $context = stream_context_create($opțiuni); // Trimiterea datelor și obținerea rezultatului echo file_get_contents("http://test.ru/json.php", 0, $context);

Utilizează o structură de date improvizată constând dintr-o dată de început și de sfârșit, precum și o serie de numere ale unor înregistrări condiționate. Observați că în antetul cererii tipul de conținut este specificat tipul „application/json”.

Obținerea datelor

Pentru a primi datele transmise în modul de mai sus, este necesar să citiți datele din fluxul de intrare „ php://input”.

Funcții utilizate pentru acceptarea datelor:

  • amestecat json_decode(șir json [, bool assoc = false [, int depth = 512 [, int opțiuni = 0 ]]])

    Această funcție decodifică un șir JSON. Parametrul json specifică șirul care trebuie decodat. Parametrul assoc controlează dacă datele returnate vor fi convertite într-o matrice asociativă. Dacă există o astfel de nevoie, atunci trebuie să specificați ca valoare a acestui parametru Adevărat. Parametrul depth indică adâncimea recursiunii. Iar ultimele opțiuni de parametru al patrulea conține masca de biți a opțiunilor de decodat. Momentan doar acceptat JSON_BIGINT_AS_STRING(în mod implicit, numerele întregi mari sunt convertite în numere în virgulă mobilă (float))

  • resursă fopen(șir nume fișier , mod șir [, bool use_include_path [, context resursă ]])

    Deschide un fișier și returnează mânerul acestuia. Parametrul nume de fișier este o resursă numită care indică un fișier. Parametrul mode specifică tipul de acces la fișier (vezi tabelul pentru o listă de moduri posibile pentru fopen()). Urmează doi parametri opționali: use_include_path și context . Când setați parametrul use_include_path la Adevărat sau 1 și cu condiția ca o cale relativă să fie specificată ca resursă numită, fișierul care urmează să fie deschis va fi căutat în lista directoarelor utilizate de funcții includeși cere. În practică, acest parametru practic nu este utilizat. Parametrul de context este utilizat pentru a specifica contextul resursei.

  • şir stream_get_contents(mânerul resursei [, int maxlen = -1 [, int offset = -1 ]])

    Această funcție vă permite să obțineți conținutul fluxului ca șir. Parametrul handle este o resursă de flux. Parametrul maxlen conține numărul maxim de octeți de citit. În mod implicit, este setat la -1, ceea ce indică faptul că toate datele sunt primite. Parametrul offset conține offset-ul de la care se începe citirea datelor. De asemenea, este setat implicit la -1, ceea ce înseamnă că va citi din poziția de pornire.

Următorul este un exemplu de obținere a datelor în format JSON pe partea serverului:

// Deschide fluxul de intrare pentru citirea $f = fopen("php://input", "r"); // Obține conținutul fluxului $date = stream_get_contents($f); if ($date) ( // Cod de procesare print_r(json_decode($data)); )

Structura de date rezultată:

Obiect StdClass ( => 2013-10-10 => 2013-10-10 => Array ( => 1 => 2 => 3 => 4 => 5 => 6 => 7))

Notă: este necesar să se țină cont de faptul că pentru a funcționa cu formatul JSON, datele trebuie să fie codificate în utf-8.

Constante furnizate de JSON pentru funcția json_encode().

JSON_HEX_TAG (întreg) Toate sunt codificate în \u003C și \u003E. Disponibil începând cu PHP 5.3.0.
JSON_HEX_AMP (întreg) Toate & sunt codificate în &. Disponibil începând cu PHP 5.3.0.
JSON_HEX_APOS (întreg) Toate caracterele ‘ sunt codificate în \u0027. Disponibil începând cu PHP 5.3.0.
JSON_HEX_QUOT(întreg) Toate caracterele " sunt codificate în \u0022. Disponibil începând cu PHP 5.3.0.
JSON_FORCE_OBJECT(întreg) Returnează un obiect în loc de o matrice atunci când utilizați o matrice non-asociativă. Acest lucru este util atunci când programul sau codul de recepție așteaptă un obiect sau matricea este goală. Disponibil începând cu PHP 5.3.0.
JSON_NUMERIC_CHECK(întreg) Codificarea șirurilor care conțin numere ca numere. Disponibil începând cu PHP 5.3.3.
JSON_BIGINT_AS_STRING(întreg) Codifică numere întregi mari ca echivalente ale șirului lor. Disponibil începând cu PHP 5.4.0.
JSON_PRETTY_PRINT(întreg) Utilizați caractere cu spații albe în datele returnate pentru a le formata. Disponibil începând cu PHP 5.4.0.
JSON_UNESCAPED_SLASHES (întreg) Nu scapi /. Disponibil începând cu PHP 5.4.0.
JSON_UNESCAPED_UNICODE(întreg) Nu codificați caractere Unicode pe mai mulți octeți (în mod implicit, acestea sunt codificate ca \uXXXX). Disponibil începând cu PHP 5.4.0.

Lista modurilor posibile pentru fopen() folosind mode

‘r’ Deschide un fișier numai în citire; plasează indicatorul la începutul fișierului.
„r+” Deschide un fișier pentru citire și scriere; plasează indicatorul la începutul fișierului.
'w' Deschide un fișier numai pentru scriere; plasează indicatorul la începutul fișierului și trunchiază fișierul la lungimea zero. Dacă fișierul nu există, încearcă să-l creeze.
'w+' Deschide un fișier pentru citire și scriere; plasează indicatorul la începutul fișierului și trunchiază fișierul la lungimea zero. Dacă fișierul nu există, încearcă să-l creeze.
'A' Deschide un fișier numai pentru scriere; plasează un indicator la sfârșitul fișierului. Dacă fișierul nu există, încearcă să-l creeze.
„a+” Deschide un fișier pentru citire și scriere; plasează un indicator la sfârșitul fișierului. Dacă fișierul nu există, încearcă să-l creeze.
'X' Creează și deschide doar pentru scris; plasează indicatorul la începutul fișierului. Dacă fișierul există deja, apelul fopen() va eșua, va returna FALSE și va genera o eroare la nivel E_WARNING. Dacă fișierul nu există, va încerca să-l creeze. Acest lucru este echivalent cu specificarea steagurilor O_EXCL|O_CREAT pentru apelul de sistem intern open(2).
'x+' Creează și deschide spre citit și scris; altfel are același comportament ca „x”.
'c' Deschide un fișier numai pentru scriere. Dacă fișierul nu există, atunci este creat. Dacă fișierul există, atunci nu este trunchiat (spre deosebire de „w”), iar un apel la această funcție nu generează o eroare (la fel ca și în cazul lui „x”). Indicatorul fișierului va fi setat la începutul fișierului. Acest lucru poate fi util dacă doriți să blocați fișierul (vezi flock()) înainte de a-l schimba, deoarece folosirea „w” poate trunchia fișierul înainte ca blocarea să fie obținută (dacă doriți să trunchiați fișierul, puteți utiliza ftruncate () funcția după solicitarea blocării). ).
'c+' Deschide un fișier pentru citire și scriere; altfel are același comportament ca „c”.

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 un format de text pentru 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 acesta din urmă, formatul de înregistrare JSON are câteva caracteristici care vor fi discutate puțin mai târziu.

JSON este folosit de obicei î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 inclusă între 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 diferite tipuri de 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ă;
  • dimensiuni foarte mici î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. atunci când îl scrieți, sunt folosite 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 de 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

JSON(JavaScript Object Notation - JavaScript Object Representation) este un format ușor de reprezentare a datelor bazat pe un subset al sintaxei JavaScript, mai precis pe literali tablouri și obiecte. JSON este o alternativă la formatele tradiționale (text simplu sau XML) care sunt utilizate în schimbul de date între un server și un client. Spre deosebire de limbajele XML și compatibile cu XML, care necesită parsare, definițiile JSON pot fi pur și simplu incluse în scripturile JavaScript. Formatul JSON a fost propus de programatorul Douglas Crockford.

Poate că vin de departe, dar pentru a înțelege cu adevărat JSON, mai întâi înțelegem (amintim) sintaxa pentru matrice și obiecte în notația literală JavaScript.

Matrice ca literale
O matrice în JavaScript poate fi definită folosind constructorul Array, astfel:

Var aData = new Array("șir", adevărat, 43, null);

În JavaScript, matricele sunt netipizate, astfel încât puteți stoca diferite tipuri de date în ele. În exemplu, matricea conține un șir, un boolean, un număr și nul.

O matrice, descrisă ca un literal, poate fi definită folosind paranteze drepte, în interiorul - valorile elementelor matricei, separate prin virgule. Iată cum ar arăta aceeași matrice, dar în notație literală:

Var aData = ["șir", adevărat, 43, nul];

Puteți accesa elemente individuale ale matricei specificând numele matricei și numărul elementului:

Alerta(aData); alert(aData);

Obiectele ca literale
Obiectele din JavaScript sunt definite folosind constructorul Object, astfel:

VaroAuto = obiect nou(); oAuto.firm = "Audi"; oAuto.model="A6"; oAuto.an = 2008; oAuto.pret = 78000;

Același cod, dar în notație literală va arăta astfel:

Var oAuto = ( "firma":"Audi", "model":"A6", "an":2008, "pret":78000);

Acest cod creează un obiect cu proprietăți de firmă, model, an și preț și poate fi accesat astfel:

Alert(oAuto.model); alert(oAuto.an);

dar puteți folosi și sintaxa matricei pentru a accesa proprietățile unui obiect astfel:

Alertă(oAuto[„model”]); alert(oAuto[„an”]);

În notație literală, declarațiile de matrice și obiecte pot fi imbricate, creând astfel obiect matrice sau matrice de obiecte. Verificați acest cod:

Var aAuto = [ ( "firm":"BMW", "model":"X5", "an":2007, "preț":99000 ), ( "firm":"Audi", "model":"A6" , "an":2008, "preț":78000 ), ( "firmă":"Volkswagen", "model":"Touareg 7L", "an":2006, "preț":45000 ) ];

Am creat o matrice aAuto care conține trei obiecte. Combinând sintaxa de acces la matrice cu sintaxa de acces la obiect, să încercăm să obținem anul de fabricație al celei de-a doua mașini:

Alertă(aAuto.an); // obține 2008

Puteți face opusul și puteți descrie un obiect matrice:

Var oAuto = ( "firma":["BMW", "Audi", "Volkswagen"], "model":["X5", "A6", "Touareg 7L"], "an":, "preț": );

în acest caz, ne referim mai întâi la obiect și apoi la matricea din interiorul acestuia:

Alert(oAuto.an); // obține 2008

Aceasta este o prefață atât de lungă, dar acum va fi mult mai clar ce are de-a face cu ea JSON

JSON este o combinație de matrice și obiecte și este destinată doar stocării datelor. Prin urmare, JSON nu poate avea variabile și nu permite nicio operațiune asupra lor. Să încercăm să scriem exemplul anterior folosind sintaxa JSON:

( "firmă":["BMW", "Audi", "Volkswagen"], "model":["X5", "A6", "Touareg 7L"], "an":, "preț": )

Notă că lipsesc numele variabilei și punctul și virgulă. Transferul unui astfel de obiect folosind protocolul HTTP va fi foarte rapid, deoarece conține un minim de caractere. După ce am primit astfel de date pe partea clientului și le-am scris într-o variabilă (de exemplu, sData), obținem un șir de informații.
Notă: exact un șir, deloc un obiect sau un obiect cu matrice imbricate. Să convertim șirul într-un obiect folosind funcția eval().

Var oAuto = eval("(" + sData + ")");

Drept urmare, obținem obiectul pe care l-am descris mai sus.

Avantajul JSON față de XML
Deci, care este exact avantajul JSON față de XML?

Aici vorbim exclusiv despre avantaje și dezavantaje doar din punctul de vedere al organizării schimbului de date pe Web.

Faptul că limbajul XML este foarte redundant în comparație cu JSON. Să vedem asta cu un exemplu simplu. Vom prezenta aceleasi date in format XML si in format JSON.

BMW X5 2007 99000 Audi A6 2008 78000 Volkswagen Touareg 7L 2006 45000

așa arată în format XML, iar mai jos este în format JSON:

( "general": ( "mașini":[ ( "firmă":"BMW", "model":"X5", "an":2007, "preț":99000 ), ( "firmă":"Audi", "model":"A6", "an":2008, "preț":78000 ), ( "firm":"Volkswagen", "model":"Touareg 7L", "an":2006, "preț":45000 ) ] ) )

Când utilizați formatul JSON, câștigul va fi de 42 de octeți și, excluzând spațiile, va fi de 86 de octeți. Și dacă ne amintim, de asemenea, că datele în format JSON nu necesită o analiză suplimentară din partea clientului, avantajul JSON față de XML în ceea ce privește transferul de date de la server la client devine evident...

  • Serghei Savenkov

    un fel de recenzie „rare”... parcă s-ar grăbi undeva