我如何安全地使用JSON.解析字符串对象,该对象可以是简单字符串或字符串对象

How can I safely use JSON.parse on a string object that might be a simple string or a string object?

本文关键字:对象 字符串 简单 JSON 何安全 安全      更新时间:2023-09-26

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

我尝试JSON.parse(data),但它不工作的情况下,数据是一个普通字符串。


EDIT -选择的解决方案

多亏了你,这就是我解决问题的方法:

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

创建一个辅助函数并使用它

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

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

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();

使用try catch:

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

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

这取决于可能的输入