Javascript 使用json作为字符串的eval()上的语法错误

Javascript 使用json作为字符串的eval()上的语法错误,javascript,json,Javascript,Json,当我尝试计算以下表达式时,收到一个错误[异常:SyntaxError:意外标记:: 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是字符串格式,如第一个示例中所示,如何将其转换为j

当我尝试计算以下表达式时,收到一个错误
[异常:SyntaxError:意外标记:

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]}")

我获得了
[异常:语法错误:意外标识符]
。如何转义

避免使用
eval
(请参阅),在可用时使用。为了支持较旧的浏览器,我建议使用第三方库,如

在您的第二个示例中,它之所以有效,是因为您已经有了一个对象,没有任何东西需要解析


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

您需要括号,但实际上,请按照bfavaretto的建议使用
JSON.parse

了解为什么当前代码失败,请考虑

eval("{}")
运行程序

{}
它只是一个不包含语句的块,而

eval("({})")

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

大括号被解释为代码块,而不是对象分隔符。因此,您将得到冒号的异常


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

只计算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很危险。

也许你可以从这里使用一些东西:那不是JSON。如果是这样的话,T1和T2将被
而不是
包围。解决这个问题并使用真正的JSON解析器,而不是
eval