从JSON.parse捕获异常的正确方法

我正在对有时包含404响应的响应使用JSON.parse。在返回404的情况下,是否有办法捕获异常,然后执行一些其他代码?

data = JSON.parse(response, function (key, value) {
var type;
if (value && typeof value === 'object') {
type = value.type;
if (typeof type === 'string' && typeof window[type] === 'function') {
return new(window[type])(value);
}
}
return value;
});
349081 次浏览

我把一些东西放入iframe,然后用json解析读回iframe的内容…有时候它不是json字符串

试试这个:

if(response) {
try {
a = JSON.parse(response);
} catch(e) {
alert(e); // error in the above string (in this case, yes)!
}
}

我们可以检查错误。404 statusCode,并使用try {} catch (err) {}

你可以试试这个:

const req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.status == 404) {
console.log("404");
return false;
}


if (!(req.readyState == 4 && req.status == 200))
return false;


const json = (function(raw) {
try {
return JSON.parse(raw);
} catch (err) {
return false;
}
})(req.responseText);


if (!json)
return false;


document.body.innerHTML = "Your city : " + json.city + "<br>Your isp : " + json.org;
};
req.open("GET", "https://ipapi.co/json/", true);
req.send();

阅读更多:

如果JSON.parse()的参数不能解析为JSON对象,则此承诺将无法解析。

Promise.resolve(JSON.parse('{"key":"value"}')).then(json => {
console.log(json);
}).catch(err => {
console.log(err);
});
我对Javascript相当陌生。但这是我所理解的: 当无效JSON作为第一个参数提供时,JSON.parse()返回SyntaxError异常。所以。最好像下面这样捕获异常:

try {
let sData = `
{
"id": "1",
"name": "UbuntuGod",
}
`;
console.log(JSON.parse(sData));
} catch (objError) {
if (objError instanceof SyntaxError) {
console.error(objError.name);
} else {
console.error(objError.message);
}
}

我把“first parameter”加粗的原因是JSON.parse()将一个恢复函数作为它的第二个参数。

你可以试试这个:

Promise.resolve(JSON.parse(response)).then(json => {
response = json ;
}).catch(err => {
response = response
});

如果你在寻找这个的广义函数,试试这个。

const parseJSON = (inputString, fallback) => {
if (inputString) {
try {
return JSON.parse(inputString);
} catch (e) {
return fallback;
}
}
};

我建议你使用这个作为ES6最佳实践。使用Error对象

try {
myResponse = JSON.parse(response);
} catch (e) {
throw new Error('Error occured: ', e);
}

以上回答也有帮助,