Правильный способ исключить исключение из JSON.parse
Im использует JSON.parse
для ответа, который иногда содержит ответ 404. В случаях, когда он возвращает 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;
});
Ответы
Ответ 1
я отправляю что-то в iframe, а затем читаю содержимое iframe с помощью json parse... поэтому иногда это не строка json
Попробуйте следующее:
if(response) {
try {
a = JSON.parse(response);
} catch(e) {
alert(e); // error in the above string (in this case, yes)!
}
}
Ответ 2
Мы можем проверить error & 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();
Ответ 3
Я новичок в Javascript. Но это то, что я понял: JSON.parse()
возвращает исключения SyntaxError
когда неверный JSON предоставляется в качестве первого параметра. Так. Было бы лучше отловить это исключение следующим образом:
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);
}
}
Причина, по которой я JSON.parse()
слова "первый параметр" жирным шрифтом, заключается в том, что JSON.parse()
принимает функцию- JSON.parse()
в качестве второго параметра.
Ответ 4
Вы можете попробовать это:
Promise.resolve(JSON.parse(response)).then(json => {
response = json ;
}).catch(err => {
response = response
});
Ответ 5
Это обещание не будет разрешено, если аргумент JSON.parse() не может быть проанализирован в объект JSON.
Promise.resolve(JSON.parse('{"key":"value"}')).then(json => {
console.log(json);
}).catch(err => {
console.log(err);
});