【发布时间】:2011-06-14 10:51:00
【问题描述】:
我有以下问题,因为我升级了我的原型JS框架。
JSON 解析不再能够将此字符串转换为对象。
"{empty: false, ip: true}"
以前在 1.6 版中是可能的,现在它需要是一个“已验证”的 JSON 字符串,例如
'{"empty": false, "ip": true}'
但是如何将第一个示例转换回对象?
【问题讨论】:
标签: javascript json prototypejs
我有以下问题,因为我升级了我的原型JS框架。
JSON 解析不再能够将此字符串转换为对象。
"{empty: false, ip: true}"
以前在 1.6 版中是可能的,现在它需要是一个“已验证”的 JSON 字符串,例如
'{"empty": false, "ip": true}'
但是如何将第一个示例转换回对象?
【问题讨论】:
标签: javascript json prototypejs
const dataWithQuotes = str.replace(/("(\\.|[^"])*"|'(\\.|[^'])*')|(\w+)\s*:/g, (all, string, strDouble, strSingle, jsonLabel) => {
if (jsonLabel) {
return `"${jsonLabel}": `;
}
return all;
});
return dataWithQuotes
与上述类似的解决方案,但更新了箭头功能。
【讨论】:
【讨论】:
eval('(' + str + ')').
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));
【讨论】: