如何在可能是简单字符串或字符串对象的字符串对象上安全地使用JSON.parse?

时间:2015-07-19 13:16:49

标签: javascript json string parsing

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

我尝试了JSON.parse(数据),但是如果数据是普通字符串则不起作用。

编辑 - 选择的解决方案

感谢您,这就是我解决问题的方法:

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

3 个答案:

答案 0 :(得分:3)

使用try catch:

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

答案 1 :(得分:2)

创建一个帮助函数并使用它。

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 :(得分:0)

假设JSON始终具有相同的格式,您还可以检查字符串是以{"(或仅{)开头,然后仅使用JSON.parse进行解析。

这实际上取决于可能的输入。