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
。