格式化字符串到js数组

Formatted string to js array

我正在使用 MVC 应用程序,我的控制器从 mongodb:

中获取了这样的字符串
str = "[{ title: 'My title', items: [{ name: 'item1', link: '#' }, { name: 'item2', link: '#' }] }]"

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

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

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

解决方案是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-格式

在对您的应用结构一无所知的情况下,将该字符串转换为对象的简单方法是使用 eval()

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

就是说,切勿在您不完全信任的字符串上使用 eval()。它很容易被滥用和利用。

这是一个将字符串更改为有效 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

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