【发布时间】:2011-12-20 14:10:03
【问题描述】:
我尝试了这个简单的 JavaScript 代码:
eval('{"Topics":["toto","tata","titi"]}')
例如,在 Chrome 控制台中,这会返回
SyntaxError: Unexpected token :
我在JSONLint 上尝试了 JSON,它是有效的。
你看到错误了吗?
【问题讨论】:
标签: javascript json eval
我尝试了这个简单的 JavaScript 代码:
eval('{"Topics":["toto","tata","titi"]}')
例如,在 Chrome 控制台中,这会返回
SyntaxError: Unexpected token :
我在JSONLint 上尝试了 JSON,它是有效的。
你看到错误了吗?
【问题讨论】:
标签: javascript json eval
第一:不要使用 eval。
第二个。只用 eval 做某事,好被评价。比如:
eval('var topics = {"Topics":["toto","tata","titi"]}');
【讨论】:
FWIW,请改用JSON.parse。比eval 更安全。
【讨论】:
因为那是在评估一个对象。 eval() 要求您传入语法上有效的 javascript,而您所做的只是传入一个裸对象。调用应该更像:
eval('var x = {"Topics":etc...}');
【讨论】:
因为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 的内容在 statement 上下文中运行,因此它被视为 FunctionDeclaration 语法结构。产生的错误是“SyntaxError: function statement requires a name”。给它一个名字 (eval('function f(){}'); f()) 或强制它进入 FunctionExpression 构造 (f = eval('(function(){alert("hi")})'); f())。见es5.github.com/x13.html
an ExpressionStatement cannot start with the function keyword because that might make it ambiguous with a FunctionDeclaration (es5.github.com/x12.html#x12.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''
【讨论】:
你必须这样写
eval('('+stringJson+')' );
将字符串转换为对象
希望我能帮上忙!
【讨论】:
如果您使用的是 JQuery,请使用函数 $.parseJSON(),为我工作,遇到同样的问题
【讨论】:
如果你想创建一个数组,请使用下面的代码
var jsonObject = eval('(' +"["+ response + "]"+')');
【讨论】: