Eval() = Неожиданный токен: ошибка

Я пробовал этот простой JavaScript-код:

eval('{"Topics":["toto","tata","titi"]}')

В консоли Chrome, например, это возвращает

СинтаксисError: Неожиданный токен:

Я попробовал JSON на JSONLint и он действителен.

Вы видите ошибку?

Ответ 1

FWIW, вместо этого используйте JSON.parse. Безопаснее, чем eval.

Ответ 2

Потому что eval не форсирует контекст выражения, а предоставленная строка является недопустимой программой JavaScript, поэтому первые три токена (и как они выглядят):

{            // <-- beginning of a block, and NOT an Object literal
"Topics"     // <-- string value, okay (note this is NOT a label)
:            // <-- huh? expecting ";" or "}" or an operator, etc.

Счастливое кодирование.

Ответ 3

Вам нужно написать вот так

eval('('+stingJson+')' );

для преобразования строки в Object

Надеюсь, что помогу!

Ответ 4

Номер один: не используйте eval.

Номер два. Используйте только eval, чтобы что-то сделать, хорошо оценить. Как например:

eval('var topics = {"Topics":["toto","tata","titi"]}');

Ответ 5

Потому что это оценка объекта. eval() требует, чтобы вы передавали синтаксически корректный javascript, и все, что вы делаете, - это передать пустой объект. Вызов должен быть больше похож:

eval('var x = {"Topics":etc...}');

Ответ 6

Использование:

function evalJson(jsArray){ eval("function x(){ return "+ jsArray +"; }"); return x(); }

var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');

console.log(yourJson.Topics[1]); // print 'tata''

Ответ 7

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