Introducere in JSON
JavaScript Object Notation (JSON) este un standard deschis care permite reprezentarea datelor ca si perechi de tipul nume-valoare si liste ordonate de valori. Derivat din sintaxa obiectelor de la nivelul limbajului JavaScript (de unde si numele sau, JavaScript Object Notation), JSON reprezinta cel mai popular format pentru schimbul de date intre diverse sisteme.
Desi formatul JSON are ca si punct de plecare limbajul de programare JavaScript, el prezinta suport, direct sau prin intermediul unor biblioteci, pentru marea majoritate a limbajelor de programare. Inca de la definire, JSON a fost gandit pentrua fi utilizat si in aplicatiile web, ca alternativa la limbajul XML. In momentul de fata, JSON este utilizat in mod obisnuit pentru a realiza schimbul de date intre clientii si serverele web.
Formatul JSON beneficiaza de mai multe avantaje, dintre care pot fi amintite urmatoarele:
• auto-descriptiv: sintaxa si structura ierarhica a sirurilor JSON poate fi interpretata cu usurinta atat de oameni, cat si de masini;
• simplu: JSON prezinta o sintaxa mai redusa si o mapare mult mai rapida catre structuri specifice limbajelor de programare;
• rapid: parcurgerea/parsarea structurilor de tip JSON este mai rapida decat a celor de tip XML;
• facilitati pentru utilizare internationala: ofera suport pentru UNICODE si independenta de codificare si limbaj;
• usor de utilizat: formatul JSON este usor de invatat, citit si inteles.
Urmatorul exemplu demonstreaza modul in care putem utiliza formatul JSON pentru a stoca datele corespunzatoare cursurilor de la nivelul unui program de studii.
Sintaxa JSON
Sintaxa JSON nu este altceva decat un subset al sintaxei care permite definirea/notarea obiectelor in limbajul JavaScript. Cu toate acestea, nu este necesara utilizarea limbajului JavaScript pentru a citi sau scrie date JSON, doarece formatul este unul de tip text, independent de platforma si limbaj.
Dupa cum se poate observa din exemplul precedent, prin utilizarea formatului JSON datele sunt organizate pe baza a doua structuri:
• colectie de perechi de tipul nume-valoare; la nivelul limbajelor de programare, aceasta structura este implementata prin intermediul obiectelor, inregistrarilor, dictionarelor sau tabelelor asociative;
• lista ordonata de valori: implementarea acestei structuri in limbajele de programare se realizeaza prin intermediul tablourilor, listelor sau sirurilor.
Aceste structuri de date sunt universale, fiind suportate, intr-o forma sau alta, de marea majoritate a limbajelor de programare actuale.
O pereche de tipul nume-valoare este un sir de caractere care reprezinta numele unei caracteristici, proprietati sau atribut, impreuna cu valoarea sa.
"grad": "As.dr.ing."
Un obiect reprezinta un set neordonat de perechi de tipul nume-valoare. Cum am precizat si mai sus, obiectele sunt precizate prin intermediul acoladelor ({, }). Un nume de la nivelul obiectului este urmat de doua puncte (:), iar perechite le tip nume-valoare sunt despartite prin virgula (,).
{ "grad": "As.dr.ing.", "nume": "Iulia Enache", "birou": 221 }
Un tablou este o colectie ordonata de valori. Un tablou incepe cu paranteza dreapta deschisa ([) si se incheie cu paranteza dreapta inchisa (]), iar valorile de la nivelul lui sunt despartite prin virgula (,).
[ { "grad": "Conf.dr.ing.", "nume": "Dan Bota", "birou": 619 }, { "grad": "As.dr.ing.", "nume": "Iulia Enache", "birou": 221 } ]
O valoare poate fi un sir de caractere, un numar, true, false, null, un obiect sau un tablou. Structurile de acest fel pot fi imbricate. Un sir de caractere reprezinta o secventa de caractere UNICODE delimitate prin ghilimele. La nivelul sirurilor de caractere pot fi utilizate secvente speciale, introduse pe baza caracterului (\). Pentru valorile numerice nu sunt disponibile formatele octal si hexazecimal.
"As.dr.ing."
Tipuri de date JSON
Formatul JSON ofera suport pentru sase tipuri de date, dintre care patru sunt tipuri de date primitive (siruri de caractere, numere, boolean, null), iar doua sunt tipuri de date complexe (tablouri si obiecte).
Tip date | Descriere | Exemplu |
---|---|---|
sir caractere | secventa de caractere UNICODE delimitata prin ghilimele | “As.dr.ing.” |
numar | numar intreg sau numar in virgula mobila si dubla precizie | 221 |
boolean | prezinta doua valori: true si false | true |
null | se utilizeaza atunci cand nu exista nici o valoare pentru un nume | null |
Sirurile de carectere JSON pot include caractere speciale, care trebuie prefixate de blackslash (\) pentru a putea fi interpretate corect: “ (double quotation), \ (backslash), / (forward slash), b (backspace), f (form feed), n (new line), r (carriage return), t (horizontal tab), u (four hexadecimal digits).
In exemplul precizat in introducere, sunt prezente perechi de tipul nume-valoare care prezinta diverse tipuri de date. De exemplu, tipul de date al valorii pe care numele “grad” o refera este un sir de caractere, in timp ce tipul de date al valorii referite de numele “birou” este un numar intreg.
"grad": "As.dr.ing."
"birou": 221
Tip_date | Descriere | Exemplu |
---|---|---|
obiect | o lista de valori denumite (simple sau complexe) despartite prin virgula si delimitate prin acolade | { “grad”: “As.dr.ing.”, “nume”: “Iulia Enache”, “birou”: 221} |
tablou | o lista de valori fara nume (simple sau complexe) despartite prin virgula si delimitate prin paranteze drepte | [“As.dr.ing.”, false, null, 221] |
Tot in exemplul din introducere, se poate observa faptul ca tipurile de date ale valorilor pe care le refera numele “ “ “tutor“ pot fi atat de tip obiect, daca cursul are un singur tutor, cat si de tip tablou de obiecte, in cazul in care pentru un curs sunt precizati mai multi tutori.
"tutor": { "grad": "Sl.dr.ing.", "nume": "Maria Popescu", "birou": 226 }
"tutor": [{ "grad": "Conf.dr.ing.", "nume": "Dan Bota", "birou": 619 }, { "grad": "As.dr.ing.", "nume": "Iulia Enache", "birou": 221 } ]
Editarea si validarea secventelor in format JSON poate fi realizata cu ajutorul JSONLint – JSON Validator, o unealta online disponibila la adresa https://jsonlint.com/. Un validator JSON verifica daca datele in format JSON respecta specificatiile stabilite in ECMA-404 The JSON Data Interchange Standard. De asemenea, un validator formateaza datele JSON pentru a le face mai lizibile, prin afisarea indentata a acestora pe mai multe linii.