当我尝试评估以下表达式时,我收到错误[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]
。如何逃脱"
?
答案 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很危险。