Подтвердить что ты не робот

Альтернативы JavaScript eval() для разбора JSON

Быстрый вопрос. Eval в JavaScript небезопасно, не так ли? У меня есть объект JSON в виде строки, и мне нужно превратить его в фактический объект, чтобы я мог получить данные:

function PopulateSeriesFields(result) 
{
    data = eval('(' + result + ')');
    var myFakeExample = data.exampleType
}

Если это помогает, я использую метод $.ajax из jQuery.

Спасибо

4b9b3361

Ответ 1

Хорошо, безопасно или нет, когда вы используете jQuery, вам лучше использовать метод $. getJSON(), а не $.ajax():

$.getJSON(url, function(data){
    alert(data.exampleType);
});

eval() обычно считается безопасным для разбора JSON, когда вы только общаетесь со своим собственным сервером, и особенно когда вы используете хорошую библиотеку JSON на стороне сервера, что гарантирует, что сгенерированный JSON не будет содержать ничего противного.

Даже Дуглас Крокфорд, автор JSON, сказал, что вы не должны использовать eval() в любом месте вашего кода, за исключением разбора JSON. См. Соответствующий раздел в своей книге JavaScript: Хорошие части

Ответ 2

Вы должны использовать JSON и написать JSON.parse.

"Ручной" синтаксический анализ слишком медленный, поэтому реализация JSON.parse из библиотеки проверяет материал, а затем заканчивается использованием eval, поэтому все еще небезопасно. Но, если вы используете новый браузер (IE8 или Firefox), код библиотеки фактически не выполняется. Вместо этого запускается встроенная поддержка браузера, а затем вы в безопасности.

Подробнее здесь и здесь.

Ответ 3

Если вы не можете доверять источнику, то вы правы... eval небезопасен. Его можно использовать для ввода кода на ваши страницы.

Посмотрите эту ссылку для более безопасной альтернативы:

JSON в Javascript

На странице объясняется, почему eval является небезопасным и предоставляет ссылку на парсер JSON в нижней части страницы.

Ответ 4

небезопасный? Это зависит от того, можете ли вы доверять данным.

Если вы можете доверять, что строка будет JSON (и не будет включать, например, функции), то она безопасна.

Тем не менее, если вы используете jQuery, почему вы делаете это вручную? Используйте параметр dataType, чтобы указать, что это JSON, и пусть библиотека позаботится об этом для вас.

Ответ 5

Если вы используете jQuery, начиная с версии 1.4.1 вы можете использовать jQuery.parseJSON()

Смотрите этот ответ: Безопасный json-анализ с jquery?

Ответ 6

Использование JavaScripts eval небезопасно. Поскольку JSON - это всего лишь подмножество JavaScript, но JavaScripts eval позволяет использовать любой действительный JavaScript.

Вместо этого используйте реальный парсер JSON, например, парсер JSON от json.org.

Ответ 7

Альтернативой оценке кода является его анализ вручную. Это не так сложно, как кажется, но во время работы оно намного тяжелее. Вы можете прочитать об этом здесь.

Важно отметить, что JSON по своей сути небезопасен. До тех пор, пока вы доверяете источнику, чтобы не переваривать вещи. Это включает в себя обеспечение того, чтобы все вещи, переданные в кодер JSON, были экранированы надлежащим образом (чтобы остановить людей на 2 шага вверх по потоку, выполняющему код на компьютерах ваших пользователей).

Ответ 8

вы можете попробовать это как

var object = new Function("return " + jsonString)()

Ответ 9

Еще одна отличная альтернатива - YUI: http://yuilibrary.com/yui/docs/json/

Итак, ваш код будет примерно таким:

Y.JSON.parse('{"id": 15, "name": "something"}');