如何使用Javascript

时间:2018-02-28 15:50:44

标签: javascript

我正在尝试使用JSON.parse将字符串解析为数组数组,例如

var a = "[['1909-23', 'egg']]"  
JSON.parse(a)

它给了我SytaxError。不知道有没有简单的方法来解决它。感谢。

2 个答案:

答案 0 :(得分:4)

字符串

"[['1909-23', 'egg']]"

不是有效的JSON字符串。因此,无法在其上调用JSON.parse()

JSON format requires double引用字符串。

然后解决方案是使用双引号:

var a = '[["1909-23", "egg"]]';
console.log(JSON.parse(a));

答案 1 :(得分:1)

在使用此功能之前,请阅读Why is using the JavaScript eval function a bad idea?这可能会打开您的JavaScript代码注入攻击。更好的解决方案是actually turn your string into correct JSON and parse is using JSON.parse

所有人都说,你可以使用eval“解析”(实际上你已经执行字符串作为javascript,因此注入问题)。

var a = "[['1909-23', 'egg']]" 
var b = eval(a);
console.log(b);

请注意warning on MDN

  

不要使用eval!

     

eval()是一个危险的函数,它执行它传递的代码   具有来电者的特权。如果使用字符串运行eval()   可能会受到恶意方的影响,您最终可能会运行   具有您的权限的用户计算机上的恶意代码   网页/扩展程序。更重要的是,第三方代码可以看到   调用eval()的范围,可能导致可能的攻击   以类似函数不易受影响的方式。

     

eval()也比替代品慢,因为它必须调用   JS解释器,而许多其他构造都经过优化   现代JS引擎。

     

此外,现代的JavaScript解释器将javascript转换为   机器代码。这意味着任何变量命名的概念都会得到   抹杀。因此,任何使用eval都会迫使浏览器做很长时间   昂贵的变量名称查找,以找出变量的位置   存在于机器代码中并设置它的值。另外,新事物   可以通过eval()引入该变量,例如更改   该变量的类型,强制浏览器重新评估所有   生成的机器代码来补偿。但是,(谢天谢地)   存在一个非常好的eval替代方法:只需使用window.Function。   作为如何使用邪恶的eval()将代码转换为使用的示例   功能(),