A JSON formátum ellen a leggyakoribb kritika az eval miatti sebezhetőség. Én ezt túllihegett problémának érzem. De kétségtelen, hogy előfordulhat olyan példa, amikor kellemetlen következménye lehet a JSON értelmezés közben alkalmazott eval használatának. (bár ilyen eseteknél nem az eval az egyedüli probléma) Talán emiatt is lehetett, hogy nemrégibben több böngészőgyártó a JavaScript-hez hozzáadta az un. natív JSON kiegészítést. Így már az eval helyett használhatja az ember a beépített JSON elemzőt.
Amiért ez számomra érdekes volt, hogy meglepően gyorsabb az eval-nál.
for (var i = 0; i < 1000; i++) {
t.push(Math.random());
}
var str = '[' + t.join() + ']';
console.time('eval');
var list = eval('(' + str + ')');
console.timeEnd('eval');
console.time('json');
var list = JSON.parse(str);
console.timeEnd('json');
Az eredmény:
eval: 109ms
json: 2ms
Azt hiszem, hogy a számok magukért beszélnek.
ExtJS 3-tól kezdve használja az Ext.util.JSON a native JSON függvényeket. Már, ha beállítjuk, hogy használja:
Ha esetleg valaki nem tud váltani 2.x-ről 3-ra, annak is megérheti a 3-as verzióból átemelni a native JSON-t használó megoldást.
Illetve, ha a licensz miatt valaki megmaradt 2.0.2-nél, akkor is átemelhető a Core-ból az új verzió, amely szintén teljes használatra jogosít.
Annyi megjegyzés még kell ide, hogy míg az eval megeszi a {name: "János vitéz"} formát, addig a beépített JSON elemzőnek kell az idézőjel, azaz {"name": "János vitéz"}. A váltás előtt érdemes az ilyenekre is odafigyelni!