网站搜索

javascript - 我如何才能安全地对可能是简单字符串或字符串对象的字符串对象使用 JSON.parse?


我需要能够解析对象格式或普通字符串格式的字符串。做到这一点最安全的方法是什么?

我尝试了 JSON.parse(data),但在 data 是普通字符串的情况下它不起作用。

编辑 - 选择的解决方案

多亏了你,我是这样解决这个问题的:

try {
    dataObj = JSON.parse(data);
} catch (err) {
    if (typeof data === "object") {
        dataObj = data;
    } else {
        dataObj = {};
    }
}

答案#1

为自己创建一个辅助函数并使用它。

function parseValue(value) {
    try
    {
        return JSON.parse(value);
    }
    catch (ex)
    {
        // JSON format was invalid
        // handle errors is you need to
    }

    return value;
}

如果你足够勇敢,你也可以扩展 String.prototype,这样调用它就会变得非常直接。

String.prototype.parseJSON = String.prototype.parseJSON || function() {
    try
    {
        return JSON.parse(this);
    }
    catch (ex)
    {
        // JSON format was invalid
        // handle errors is you need to
    }

    return this;
};

然后你只需这样调用它:

// string in a variable
var s = "Some non-JSON string";
s.parseJSON();
// string literal
'{"b":true,"n":1}'.parseJSON();

答案#2

使用 try catch:

var result;
try {
   result = JSON.parse(data);
} catch (err) {
   if (typeof data == 'string') result = data;
   else console.error(err);
}