【发布时间】:2011-08-17 15:46:58
【问题描述】:
我有以下文本对象:
[{message="Hello World"}]
如何将其转换为 JavaScript 数组?
【问题讨论】:
标签: javascript arrays text
我有以下文本对象:
[{message="Hello World"}]
如何将其转换为 JavaScript 数组?
【问题讨论】:
标签: javascript arrays text
您可以将= 替换为:,然后使用JSON.parse。然后你需要用"'s 包装消息。
// error = not :
JSON.parse('[{message="Hello World"}]')
// errors = message not "message"
JSON.parse('[{message="Hello World"}]'.replace('=',':'))
试试这个:
var message = '[{message="Hello World"}]'
message = message.replace('message', '"message"').replace('=',':')
JSON.parse(message)
您可以使用eval 来做同样的事情:
// still gotta replace the '='
eval('[{message="Hello World"}]'.replace("=",":"))
但是eval还有其他问题:
eval('window.alert("eval is evil")')
所以要小心。确保你知道你在评估什么。
【讨论】:
那是JSON。如果你使用的是 jquery,那么
var arr = jQuery.parseJSON('[{message="Hello World"}]');
alert(arr[0].message);
一种远不那么“安全”的方法是
var arr = eval('[{message="Hello World"}]');
之后 arr 将与 jquery 版本相同。
但是,它可能应该是 [{message:"Hello World"}] 才能成为正确有效的 json。
【讨论】:
虽然这不是有效的 JSON,但您可以将所有 = 替换为 :,为键添加引号,然后使用 JSON.parse 进行转换:
//text = '[{message="Hello World"}]'
text = text.replace(/(\w+)\s*=/g, "\"$1\":");
var array = JSON.parse(text);
如果不支持JSON.parse,可以使用eval:
//text = '[{message="Hello World"}]'
text = text.replace(/(\w+)\s*=/g, "\"$1\":");
var array = eval("("+text+")");
虽然不推荐这样做。
【讨论】: