我遇到以下问题,因为我升级了我的prototypeJS框架。将“已转换”的对象字符串转换为JSON或对象
JSON解析无法将此字符串转换为对象。
"{empty: false, ip: true}"
以前在1.6版本有可能,现在它必须是一个“有效的” JSON字符串像
'{"empty": false, "ip": true}'
但我怎么能转换成第一例回一个对象?
我遇到以下问题,因为我升级了我的prototypeJS框架。将“已转换”的对象字符串转换为JSON或对象
JSON解析无法将此字符串转换为对象。
"{empty: false, ip: true}"
以前在1.6版本有可能,现在它必须是一个“有效的” JSON字符串像
'{"empty": false, "ip": true}'
但我怎么能转换成第一例回一个对象?
JSON需要被引用的所有按键,所以这样的:
"{empty: false, ip: true}"
不是有效的JSON。你需要预处理它才能解析这个JSON。
function preprocessJSON(str) {
return str.replace(/("(\\.|[^"])*"|'(\\.|[^'])*')|(\w+)\s*:/g,
function(all, string, strDouble, strSingle, jsonLabel) {
if (jsonLabel) {
return '"' + jsonLabel + '": ';
}
return all;
});
}
(Try on JSFiddle)它使用一个简单的正则表达式替换词,随后是冒号,与一字双引号内引用。正则表达式不会引用其他字符串中的标签。
然后你就可以放心地
data = JSON.parse(preprocessJSON(json));
您需要的顺序添加括号的JavaScript引擎看到它作为一个对象,而不是块。 `eval('('+ str +')')`。 – Thai 2011-01-24 11:38:27
谢谢,这对我的作品:) – Maertz 2011-01-24 12:28:19