Я использовал JavaService прежде с хорошим успехом. Это не было обновлено за несколько лет, но было симпатичным горным телом назад, когда я использовал его.
Вы более уязвимы для атак , если используете eval
: JSON - это подмножество Javascript, а json.parse просто анализирует JSON, тогда как eval
оставит дверь открытой для всех выражений JS.
JSON - это всего лишь подмножество JavaScript. Но eval
оценивает весь язык JavaScript, а не только подмножество JSON.
Если вы проанализируете JSON с помощью eval
, вы позволите анализируемой строке содержать абсолютно все, поэтому вместо того, чтобы быть просто набором данных, вы могли бы найти вы выполняете вызовы функций или что-то еще.
Кроме того, синтаксический анализ JSON
принимает дополнительный параметр, reviver, который позволяет вам указать, как работать с определенными значениями, такими как дата и время (дополнительная информация и пример во встроенной документации здесь )
Не все браузеры имеют встроенную поддержку JSON, поэтому будут случаи, когда вам нужно использовать eval ()
в строку JSON. Используйте парсер JSON из http://json.org , так как он справится со всем намного проще для вас.
Eval ()
- зло, но против некоторых браузеров это необходимое зло, но где вы можно этого избежать, сделайте это !!!!!
Все реализации JSON.parse
, скорее всего, используют eval ()
JSON.parse
основан на решении Дугласа Крокфорда , которое использует eval ()
прямо здесь, в строке 497 .
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
Преимущество JSON.parse
в том, что он проверяет правильность синтаксиса JSON аргумента.