eval()上的语法错误,json为字符串

时间:2012-03-29 15:49:25

标签: javascript json

当我尝试评估以下表达式时,我收到错误[Exception: SyntaxError: Unexpected token :]

eval("{"T1": [1,2,3,4,5,6,7,8,9,10,11,12], "T2": [12,11,10,9,8,7,5,4,3,2,1]}")

然而,没有"的相同表达式起作用:

eval({"T1": [1,2,3,4,5,6,7,8,9,10,11,12], "T2": [12,11,10,9,8,7,5,4,3,2,1]})

如果我的JSON是字符串格式,就像在第一个例子中一样,我怎样才能将它转换为javascript对象?

如果我尝试使用:

JSON.parse("{"T1": [1,2,3,4,5,6,7,8,9,10,11,12], "T2": [12,11,10,9,8,7,5,4,3,2,1]}")

我得到[Exception: SyntaxError: Unexpected identifier]。如何逃脱"

4 个答案:

答案 0 :(得分:5)

避免使用eval(请参阅why),在可用时使用JSON.parse。为了支持旧浏览器,我建议使用第三方库,例如Crockford's

在你的第二个例子中,它有效,因为没有任何东西需要解析,你已经有了一个对象。

编辑:您又添了一个问题,答案就是:您使用"转义\。例如,这是一个只包含引号的有效字符串:"\""

答案 1 :(得分:2)

花括号被解释为代码块,而不是对象分隔符。因此,您将获得冒号的例外。

您可以通过使用()包围对象来解决这个问题,但最好使用JSON.parse。不要忘记:eval是邪恶的: - )

答案 2 :(得分:1)

你需要括号,但实际上,使用JSON.parse作为bfavaretto建议。

要了解当前代码失败的原因,请考虑

eval("{}")

运行程序

{}

这只是一个不包含任何语句的块

eval("({})")

运行包含单个语句的程序,该语句计算表达式{},一个空对象。

答案 3 :(得分:0)

仅仅评估json对象而不实际将其分配给任何变量有什么意义?

对我来说似乎毫无意义。

eval不是专用的json解析器。它是JS解析器,它假设{}是一个代码块。

然而这可行

eval("var abc = {'T1': [1,2,3,4,5,6,7,8,9,10,11,12], 'T2': [12,11,10,9,8,7,5,4,3,2,1]};");

正如大家所说,如果你真的需要解析json,请使用JSON.parse。 Eval很危险。