在javascript中将字符串转换为带有变量的动态数组
如何获取字符串(使用jQuery的text()从页面中获取),例如: 并将其转换为我需要的实际javascript对象,例如:在javascript中将字符串转换为带有变量的动态数组,javascript,jquery,Javascript,Jquery,如何获取字符串(使用jQuery的text()从页面中获取),例如: 并将其转换为我需要的实际javascript对象,例如: var myObject = [{name:'xxx',data:[1,2,3,4,5]},{name:'yyy',data:[5,4,3,2,1]}]; 因此,“name”和“data”将是非动态变量,而name值、数据数组和myObject的长度将是动态的 我不确定从哪里开始。我猜我将不得不进行大量的拆分和循环,但我愿意接受建议。你的意思是 var myObjec
var myObject = [{name:'xxx',data:[1,2,3,4,5]},{name:'yyy',data:[5,4,3,2,1]}];
因此,“name”和“data”将是非动态变量,而name值、数据数组和myObject的长度将是动态的
我不确定从哪里开始。我猜我将不得不进行大量的拆分和循环,但我愿意接受建议。你的意思是
var myObject = eval('(' + myData + ')');
?
编辑
它的主要缺点是,您可以将任何javascript代码(不仅仅是JSON)放入eval(Chrome的F12允许任何人利用它)。在使用jQuery时,最好的选择是
var myObject = $.parseJSON(myData);
用于跨浏览器兼容性
$.parseJSON
获取格式良好的JSON字符串并返回结果JavaScript
对象传入格式错误的JSON字符串可能会导致异常
被扔了。例如,以下都是格式错误的JSON
字符串:
{test:1}(test周围没有双引号)。
{'test':1}('test'使用单引号而不是双引号)。
嗯,这很容易做到:
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);
编写解析器,使用
eval
,或者更改格式以使用有效的JSON标记。您需要对其进行JSON格式化,然后使用JSON解析器。以上不是JSON.Valid解决方案,但通常在建议eval
时给出适当的警告是个好主意。(事实上,根据问题中的代码,在@Guffa's之前,这是唯一正确的解决方案。)@knicket,这就是答案。注意,您的服务器端语言可以将服务器上的本机对象或数组JSONify化为字符串,因此不要尝试自己动手。例如,PHP有json\u encode()
(和json\u decode()
)。但是,您应该尝试了解JSONified字符串是什么(不是),以及它在功能上与Javascript中的对象文字语法有什么不同,后者是问题中数据的格式(用双引号括起来)。
var myData = '[{"name":"xxx","data":[1,2,3,4,5]},{"name":"yyy","data":[5,4,3,2,1]}]';
var myObject = $.parseJSON(myData);