» » » » » Portabilitatea datelor în JSON

Portabilitatea datelor în JSON

JSON_logoProbleme de portabilitate a datelor

În ciuda convingerii larg răspândite că JSON este un subset strict de JavaScript, acest lucru nu este adevărat. Mai exact, JSON permite terminatoarelor de linie Unicode U+2028 line separator şi U+2029 paragraph separator să apară fără terminare în șiruri în ghilimele, în timp la JavaScript nu este posibil. Aceasta este o consecință a faptului că JSON ignoră „caractere de control”. Pentru portabilitate maximă aceste caractere ar trebui să se termine cu backslash. Această subtilitate este importantă atunci când se generează JSONP.

Deși permisă de JSON, includerea caracterului nul U + 0000 <de control-0000> într-un șir, cu sau fără backslash-escape, poate cauza probleme cu unele implementări JSON, în special cele bazate pe limbajul C.

Documentele JSON pot fi, și de multe ori sunt, codificate în UTF-8, care suportă tot setul de caractere Unicode. Cu toate acestea, inclusiv caracterele din afara BMP (de la U+10000 la U+10FFFF) pot crea probleme. În special, aceste caractere trebuie să fie codificate în mod explicit (și decodificate) folosind perechi surogat. Acest lucru este similar cu modul în care funcționează încodarea UTF-16. De exemplu, pentru a include caracterul U+1F602 😂face with tears of joy în JSON:

 
{ "face": "uD83DuDE02" }

Numerele din JSON sunt agnostice în ceea ce privește reprezentarea lor în cadrul limbajelor de programare. Nicio diferențiere nu se face între o valoare întreagă și virgula flotantă: unele implementari pot trata 42, 42.0, și 4.2E+1 ca același număr, în timp ce altele nu. Mai mult decât atât, nicio cerință nu există în ceea ce privește problemele legate de implementare, cum ar fi overflow, underflow, pierderea de precizie, sau rotunjire. În plus, JSON nu spune nimic despre tratamentul zerourilor semnate: dacă 0.0 este diferit de la -0.0. Cele mai multe implementări care folosesc standardul de virgulă flotantă IEEE 754, inclusiv JavaScript, va păstra zerourile semnate; dar nu toate de implementările JSON pot face acest lucru.

Folosirea JSON în JavaScript

Din moment ce JSON a fost derivat din JavaScript și sintaxa sa este (mai ales), un subset al limbajului, este adesea posibil să se utilizeze funcția JavaScript eval () pentru a analiza datele JSON. Acest lucru este considerat nesigur. În schimb, o bibliotecă de analiză JSON sau suport JSON nativ JavaScript ar trebui să fie utilizat pentru citirea și scrierea JSON. Un analizor JSON implementat corect va accepta doar JSON valid, prevenind coduri malițioase potențiale să fie executate în mod accidental.

 
var p = JSON.parse(contact);

Browserele Web, cum ar fi Firefox și Internet Explorer, au, începând cu anul 2010, inclus suport pentru lucrul cu JSON. Întrucât suportul browser nativ este mai eficient și mai sigur decât eval (), suportul nativ JSON este inclus în Ediția 5 din standardul ECMAScript.

Tipuri de date native nesuportate

Sintaxa JavaScript defineşte mai multe tipuri de date native, care nu sunt incluse în standardul JSON: Date, erori, expresii regulate, și funcții. Aceste tipuri de date JavaScript trebuie să fie reprezentate de către un alt format de date, cu programele de la ambele capete în acord cu privire la modul de convertire între tipuri. Din 2011, există unele standarde de facto, de exemplu, conversia de la date la şiruri, dar niciunul nu este recunoscut universal. Alte limbi pot avea un set diferit de tipuri native care trebuie să fie serializate cu grijă pentru a se ocupa de acest tip de conversie.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *