Я пробовал этот простой JavaScript-код:
eval('{"Topics":["toto","tata","titi"]}')
В консоли Chrome, например, это возвращает
СинтаксисError: Неожиданный токен:
Я попробовал JSON на JSONLint и он действителен.
Вы видите ошибку?
Я пробовал этот простой JavaScript-код:
eval('{"Topics":["toto","tata","titi"]}')
В консоли Chrome, например, это возвращает
СинтаксисError: Неожиданный токен:
Я попробовал JSON на JSONLint и он действителен.
Вы видите ошибку?
FWIW, вместо этого используйте JSON.parse
. Безопаснее, чем eval
.
Потому что 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.
Счастливое кодирование.
Вам нужно написать вот так
eval('('+stingJson+')' );
для преобразования строки в Object
Надеюсь, что помогу!
Номер один: не используйте eval.
Номер два. Используйте только eval, чтобы что-то сделать, хорошо оценить. Как например:
eval('var topics = {"Topics":["toto","tata","titi"]}');
Потому что это оценка объекта. eval() требует, чтобы вы передавали синтаксически корректный javascript, и все, что вы делаете, - это передать пустой объект. Вызов должен быть больше похож:
eval('var x = {"Topics":etc...}');
Использование:
function evalJson(jsArray){ eval("function x(){ return "+ jsArray +"; }"); return x(); }
var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');
console.log(yourJson.Topics[1]); // print 'tata''
Если вы используете JQuery, используйте функцию $.parseJSON()
, работающую для меня, имели ту же проблему