Eval () = неожиданный токен: ошибка - PullRequest
14 голосов
/ 02 ноября 2011

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

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

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

SyntaxError: Неожиданный токен:

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

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

Ответы [ 7 ]

30 голосов
/ 17 января 2013

Вы должны написать так

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

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

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

25 голосов
/ 02 ноября 2011

Поскольку 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.

Удачного кодирования.

10 голосов
/ 02 ноября 2011

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

9 голосов
/ 02 ноября 2011

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

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

eval('var topics = {"Topics":["toto","tata","titi"]}');
4 голосов
/ 28 декабря 2012

USE:

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

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

console.log(yourJson.Topics[1]); // print 'tata''
4 голосов
/ 02 ноября 2011

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

eval('var x = {"Topics":etc...}');
0 голосов
/ 07 июня 2013

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

...