我尝试了这个简单的JavaScript代码:
eval('{"Topics":["toto","tata","titi"]}')
例如,在Chrome控制台中,会返回
SyntaxError:意外的令牌:
我在JSONLint上尝试了JSON并且它有效。
你看到了这个错误吗?
答案 0 :(得分:30)
你必须这样写
eval('('+stingJson+')' );
将字符串转换为Object
希望我能帮忙!
答案 1 :(得分:25)
因为eval
不强制表达式上下文,并且提供的字符串是无效的 JavaScript程序,因此前三个令牌(以及它们的外观如何at)是:
{ // <-- 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.
快乐的编码。
答案 2 :(得分:9)
第一:不要使用eval。
第二名。只使用eval来制作东西,并进行评估。例如:
eval('var topics = {"Topics":["toto","tata","titi"]}');
答案 3 :(得分:8)
FWIW,请改用JSON.parse
。比eval
更安全。
答案 4 :(得分:4)
因为那是在评估一个对象。 eval()要求你传入语法上有效的javascript,而你所做的只是传入一个裸对象。电话应该更像是:
eval('var x = {"Topics":etc...}');
答案 5 :(得分:4)
使用:
function evalJson(jsArray){ eval("function x(){ return "+ jsArray +"; }"); return x(); }
var yourJson =evalJson('{"Topics":["toto","tata","titi"]}');
console.log(yourJson.Topics[1]); // print 'tata''
答案 6 :(得分:0)
如果您使用的是JQuery,请使用函数$.parseJSON()
,为我工作,遇到同样的问题
答案 7 :(得分:0)
如果要使用以下代码创建数组
var jsonObject = eval('(' +"["+ response + "]"+')');