格式化字符串到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
我很快就把它放在一起了,所以我可能忽略了一些东西。但它适用于您的示例字符串。
我正在使用 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
我很快就把它放在一起了,所以我可能忽略了一些东西。但它适用于您的示例字符串。