js里不用eval如何把字符串转成数组?有什么更好的方法吗?

需要把一个字符串转成数组,字符串通过后端生成的格式。

var data = "[{id:'1',txt:'1',others:['1','2','3']},{id:'1',txt:'1',others:['1','2','3']}]"
//为了方便阅读:
//var data = '[
//    {
//        id:'1',
//        txt:'1',
//        others:['1','2','3']
//    },
//    {
//        id:'1',
//        txt:'1',
//        others:['1','2','3']
//    }
//]'
//目前我的方法是:
var newData = eval("("+data+")")
console.log(newData.id)

有没有什么更好的方案?

阅读 5.2k
4 个回答

如果你要兼容低版本的浏览器可以这样写

var newData =(new Function("return "+data))();

如果不需要考虑,同上可以使用

JSON.parse(data);

让后端成[{"id":"1","txt":"1","others":["1","2","3"]},{"id":"1","txt":"1","others":["1","2","3"]}]这种正确的json string给你

JSON.parse() 解析
JSON.stringify() 方法将JavaScript值转换为JSON字符串

我看了一下,你说给编辑用的,我强烈不建议用JSON这种对操作要求高的语言。
何况JSON必须用双引号

对于给编辑用的 我们一般用 XML 这种错误最低的语言

这是经验之谈,多年的经验。

json.parse()也可以。 eval其实很不安全,所以最好别用,虽然其功能强大

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题