将"转换"的对象字符串转换为JSON或Object

Mae*_*rtz 0 javascript json prototypejs

我跟随问题,因为我升级了我的prototypeJS框架.

JSON解析不再能够将此字符串转换为对象.

"{empty: false, ip: true}"
Run Code Online (Sandbox Code Playgroud)

以前在版本1.6中它是可能的,现在它需要是一个"验证"的JSON字符串,如

'{"empty": false, "ip": true}'
Run Code Online (Sandbox Code Playgroud)

但是我如何将第一个例子转换回一个对象呢?

Tha*_*hai 7

JSON需要引用所有键,因此:

"{empty: false, ip: true}"
Run Code Online (Sandbox Code Playgroud)

不是有效的JSON.您需要对其进行预处理才能解析此JSON.

function preprocessJSON(str) {

    return str.replace(/("(\\.|[^"])*"|'(\\.|[^'])*')|(\w+)\s*:/g,
    function(all, string, strDouble, strSingle, jsonLabel) {
        if (jsonLabel) {
            return '"' + jsonLabel + '": ';
        }
        return all;
    });

}
Run Code Online (Sandbox Code Playgroud)

(试试JSFiddle)它使用一个简单的正则表达式替换一个单词,后跟冒号,在双引号内引用该单词.正则表达式不会引用其他字符串中的标签.

那你就可以安全了

data = JSON.parse(preprocessJSON(json));
Run Code Online (Sandbox Code Playgroud)