字符串到JavaScript数组

字符串到JavaScript数组,javascript,jquery,Javascript,Jquery,我的Ajax调用得到[['Best Value 62',62],'LPTA 32',32],]作为返回值。我需要将其作为数组传递。有没有一种方法可以在不使用eval的情况下将字符串转换为数组?如果去掉尾随的逗号并将双引号更改为转义双引号,并且数组中的任何其他内容都是格式良好的,那么可以使用JSON.parse将字符串转换为数组。如果您有权访问服务器端代码,您可能希望在那里而不是在js中进行更改 JSON.parse("[[\"Best Value (62)\",62],[\"LPTA (32)\

我的Ajax调用得到[['Best Value 62',62],'LPTA 32',32],]作为返回值。我需要将其作为数组传递。有没有一种方法可以在不使用eval的情况下将字符串转换为数组?

如果去掉尾随的逗号并将双引号更改为转义双引号,并且数组中的任何其他内容都是格式良好的,那么可以使用JSON.parse将字符串转换为数组。如果您有权访问服务器端代码,您可能希望在那里而不是在js中进行更改

JSON.parse("[[\"Best Value (62)\",62],[\"LPTA (32)\",32]]")

您拥有的不是JSON,而是有效的JavaScript,假设额外的逗号是复制粘贴错误。尽管我不喜欢它,但您可以使用eval:

// convert the input in to a javascript array
var o = eval("[['Best Value (62)',62],['LPTA (32)',32]]");
// use jQuery map to grab only the first array value and return
// each selection back as an array
$.map(o, function(a){
  return a[0];
}); // ['Best Value (62)','LPTA (32)'];
如果要保留多余的逗号,您可以使用更多的处理来消除它:

var data = "[['Best Value (62)',62],['LPTA (32)',32],]";
var o = eval(data.replace(/\],\]$/,']]'));
$.map(o, function(a){
  return a[0];
});

如果你真的有尾随逗号,即使eval也救不了你。为什么会有这样的结果,而不是一个正确的json编码数组?@Brian:尾随逗号在数组文本中是有效的?@Bergi尾随逗号几乎杀死了IE的所有版本,所以我不会指望it@Brian:我以为问题是关于JavaScript的,not jscript:-这不是有效的JSON,或者单引号删除了尾随的逗号,将单引号更改为双引号,然后我们开始!谢谢不诉诸评估,就没有不诉诸评估。它不是JSON,也不是本机对象。将其转换为可以使用的内容的唯一其他方法是使用eval…额外的逗号不会使其成为无效的JS。@Bergi,但IE<9除外我相信我的意思是,从技术上讲,您可以通过编程替换引号并修复逗号,然后将其传递给JSON.parse,但这有什么意义呢。修复逗号和评估逗号很容易,不是DV,但是如何处理字符串中间的单引号呢?现在,您将得到一个字符串值,如doesnt not work,除非使用给定的数据设置了值,并且不可能有所述引号
JSON.parse("[['Best Value (62)',62 ],['LPTA (32)',32 ],]".replace(/(,])$/, ']').replace(/'/g, '"'))