2012-06-17 2 views
1

Я раньше не использовал eval(), поэтому я предполагаю, что я просто получил синтаксис ужасно неправильно. Что случилось со следующим:Eval не работает - JavaScript

var JSONAsString = '{"item1":"one", "item2":"two", "item3":"three"}'; 
var JSONAsObject = eval(JSONString); 
alert(JSONAsObject.item1); 

Поскольку это, кажется, не работает - я загрузить страницу и ничего не происходит.

И да, я знаю, что я не должен использовать eval. Я предполагаю, что синтаксис для JSON.parse() такой же, как у eval ... right? Если это так, если (после исправления кода) я заменю eval на JSON.parse, будет ли он делать то же самое?

+0

'JSONString' vs' JSONAsString', 'JSONAsObject' vs' JSONObject' - неправильные имена переменных. Кроме того, после разбора/оценки это объект JavaScript, а не JSON (просто для nitpicking;)), поэтому 'JSONObject' не подходит. – ThiefMaster

+0

Предполагая, что вы правильно указали имена переменных, 'eval'ing string приводит к синтаксической ошибке, потому что' {...} 'интерпретируются как * block *, а не как литерал объекта. –

+0

@ThiefMaster - именно поэтому это JSON * как * (an) объект. – Bluefire

ответ

5

При использовании eval вам нужно обернуть JSON в ():

var JSONAsString = '{"item1":"one", "item2":"two", "item3":"three"}'; 
var JSONAsObject = eval('(' + JSONAsString + ')'); 
alert(JSONAsObject.item1); 

Однако, вы должны использовать JSON.parse()с самого начала, а не только позже. В противном случае возможно недопустимый JSON, действительный JavaScript может работать, но перестать работать при переключении на JSON.parse.

Обратите внимание, что при использовании JSON.* вы должны указать json2.js, так как у какого-то более старого браузера нет встроенной поддержки JSON.

+0

Aah, thanks! Делает это для всего кода, который я помещаю в переменную, а затем анализирую с помощью 'eval()' или просто JSON? – Bluefire

+0

Используйте 'JSON.parse()' и забудьте все остальное. – MaxArt

+0

Что говорит @MaxArt. Но в любом случае, если вы 'eval()' a * выражение *, вы захотите '()' вокруг него, чтобы убедиться, что он не оценивается как * statement *. – ThiefMaster

3

Не используйте eval() для разбора JSON. Используйте Douglas Crockfords json2, который дает вам кросс-браузерную поддержку, производительность и безопасность: https://github.com/douglascrockford/JSON-js