2013-03-14 75 views
1

我怎么会拿一个字符串,如(我使用jQuery的文本()从网站得到的):字符串转换为动态数组在JavaScript中的变量

var myData = "[{name:'xxx',data:[1,2,3,4,5]},{name:'yyy',data:[5,4,3,2,1]}]"; //this is a string :(

,并把它转化为实际的JavaScript对象我需要的,因此,例如:

var myObject = [{name:'xxx',data:[1,2,3,4,5]},{name:'yyy',data:[5,4,3,2,1]}]; 

所以,“名”和“数据”将非动态的变量,但是名字值,该数据阵列和myObject的长度将是动态的。

不知道从哪里开始。我猜测我将不得不做很多拆分和循环,但我愿意接受建议。

+1

写解析器,使用'eval',或者改变您的格式使用有效的JSON的标记,而不是。 – 2013-03-14 23:28:08

+1

您需要使用JSON格式,然后使用JSON解析器。以上不是JSON。 – 2013-03-14 23:28:22

回答

2

那么,它可以很容易地做到:

var myObject = eval(myData); 

但是,你应该知道eval函数的风险。由于它将值作为Javascript表达式运行,因此它也会运行任何有害的代码,因此只有在完全控制了字符串中的内容时才应使用它。

如果你能够改变的格式是JSON,就可以放心地分析它没有代码注入的风险:

var myData = '[{"name":"xxx","data":[1,2,3,4,5]},{"name":"yyy","data":[5,4,3,2,1]}]'; 

var myObject = $.parseJSON(myData); 
+2

@knicket,这是答案。请注意,您的服务器端语言可以将服务器上的本地对象或数组JSON化为字符串,因此不要试图DIY。例如,PHP有'json_encode()'(和'json_decode()')。但是,您应该尝试了解JSON化字符串是什么(并且不是)以及它在功能上与它在表示Javascript中的对象字面值语法的接吻方式上有什么不同,这是您问题中数据的格式(用双引号缠绕)。 – 2013-03-14 23:33:08

0

你的意思是,

var myObject = eval('(' + myData + ')'); 

编辑

其主要con是,你可以把任何JavaScript代码(不仅是JSON)给eval(Chrome的F12允许任何人利用这一点)。如果您使用jQuery,最佳选择将是

var myObject = $.parseJSON(myData); 

用于跨浏览器兼容性。

$.parseJSON

注意到合式JSON字符串并返回生成的JavaScript 对象。传入格式错误的JSON字符串可能会导致抛出异常 。例如,下面的都是畸形的JSON 字符串:

{test: 1} (test does not have double quotes around it).

{'test': 1} ('test' is using single quotes instead of double quotes).

+1

有效的解决方案,但通常建议在提示'eval'时给出正确的警告。 *(实际上,考虑到问题中的代码,这是@ Guffa的唯一正确解决方案。)* – 2013-03-14 23:30:20

相关问题