Prieš kelias savaites man teko skaityti pranešimą „Internet Explorer 8 programuotojams“. Pristatymas sukėlė didžiulį susidomėjimą ir gavo geriausią renginio įvertinimą. Viena iš sėkmės priežasčių – pranešime aš nagrinėjau ne tiek IE8 specifines galimybes, bet labiau HTML5 naujoves (kurios yra palaikomos IE8). Šį savaitgalį kilo mintis parašyti kelių straipsnių ciklą iš dalinio HTML5 palaikymo Internet Explorer 8 ir Firefox 3.5 naršyklėse.
Šiandien trumpai aprašysiu vieną svarbiausių IE8 ir FF3.5 naujovių – gimtąjį (Native) JSON palaikymą (Chrome, Safari ir Opera kol kas to nepalaiko). Iki šiol egzistavo du galimi darbo su JSON būdai: nesaugi JavaScript funkcija eval() ir saugi, bet ne tokia greita Crockfordo JavaScript biblioteka JSON2.js. Atsiradus gimtajam JSON palaikymui, tampa saugu ir ypač efektyvu dirbti su JavaScript objektais. Tai yra daroma JSON.parse ir JSON.stringify metodų pagalba.
JSON.parse, kaip ir seka iš pavadinimo, moka saugiai konvertuoti perduotą eilutę JSON formatu į JavaScript objektą:
JSON.stringify, skirtingai nei JSON.parse, paverčia JavaScript objektą į tekstinę eilutę JSON formatu:
Kodėl verta naudoti gimtąjį JSON palaikymą? Jis yra saugus, labai greitas ir kas svarbiausia, ateityje bus palaikomas visose pagrindinėse naršyklėse (skaityk cross-browser).
Rodyk draugams






2009-10-08 21:33
Gal gali truputėli pakomentuoti ką reiškia “saugi”?
eval vs JSON.parse/IE8
Tai jei json string’as –(paverčiamas)–> objektą, kur čia pavojus vertimo metu?
Dėkui.
2009-10-11 11:54
Evaldai,
problema tame, kad eval() priima ne tik JSON stringą, bet ir bet kurį kitą stringą, pvz., eval(’alert(”hi!”)’).
Jeigu trumpai, eval() panaudojimas gali sukelti saugumo problemų, pvz.:
var a = 1;
eval(a);
o paskui, jeigu mums pavyks pakeisti a kintamojo reikšmę į kokią kitą - bac - jau negerai. Taip pat eval() panaudojimas tam tikrais atvejais gali atidaryti Cross-Site Scripting (XSS) pažeidžiamumą.