格式化字符串到js数组

时间:2015-05-13 18:59:25

标签: javascript arrays model-view-controller

我正在使用MVC应用程序,我的控制器从mongodb获取这样的字符串:

str = "[{ title: 'My title', items: [{ name: 'item1', link: '#' }, { name: 'item2', link: '#' }] }]"

我尝试在视图中将其用作 js数组,但我找不到任何方法来转换它。

请注意,该数组将包含一些子数组作为项和一些子子数组,依此类推。

有任何帮助吗?也许我必须在业务层内部构建数组而不是返回字符串?

3 个答案:

答案 0 :(得分:2)

解决方案是JSON: 看看文档: http://www.w3schools.com/js/js_json.asp

以下是您需要做的事情:

var obj = JSON.parse(str);

这将为您提供一个Javascript-Object(JSON = JavaScriptObjectNotation),然后您可以像这样访问:

var firstTitle = obj[0].title;  // 'My title'
var itemsArrayOfFirstObject = obj[0].items;  // an Array of items
var linkOfForstItemInFirstObject = obj[0].items[0].link; // '#'

修改

我在你的例子中监督字符串不是有效的JSON格式

答案 1 :(得分:2)

了解应用程序结构的其他信息,将该字符串转换为对象的简便方法是使用eval()

var object = eval("[{ title: 'My title', items: [{ name: 'item1', link: '#' }, { name: 'item2', link: '#' }] }]");

那就是说,永远不要在你不完全信任的字符串上使用eval()。它很容易被滥用和利用。

答案 2 :(得分:0)

这是一个将字符串更改为有效JSON的函数,然后使用JSON.parse()将其作为对象返回:



function parse(str) {
  var t= '',
      special= '[]{} :,',
      qt;

  str= str.split('');

  for(var i = 0 ; i < str.length ; i++) {
    if((qt=str[i])==="'" || qt==='"') {
      do {
        t+= str[i++].replace("'",'"');
      } while(i < str.length && str[i]!==qt);
      t+= qt.replace("'",'"');
    }
    else if(special.indexOf(str[i])===-1) {
      t+= '"';
      do {
        t+= str[i++];
      } while(i < str.length && special.indexOf(str[i])==-1)
      t+= '"';
      i--;
    }
    else {
      t+= str[i];
    }
  }
  return JSON.parse(t);
} //parse

obj = parse("[{ title: 'My title', items: [{ name: 'item1', link: '#' }, { name: 'item2', link: '#' }] }]");
console.log(obj[0].items[1].name); //item2
&#13;
&#13;
&#13;

我把它快速地扔在了一起,所以我可能会忽略一些东西。但它适用于您的示例字符串。