我正在使用MVC应用程序,我的控制器从mongodb获取这样的字符串:
str = "[{ title: 'My title', items: [{ name: 'item1', link: '#' }, { name: 'item2', link: '#' }] }]"
我尝试在视图中将其用作 js数组,但我找不到任何方法来转换它。
请注意,该数组将包含一些子数组作为项和一些子子数组,依此类推。
有任何帮助吗?也许我必须在业务层内部构建数组而不是返回字符串?
答案 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;
我把它快速地扔在了一起,所以我可能会忽略一些东西。但它适用于您的示例字符串。