반응형
JSON.parse에서 예외를 포착하는 올바른 방법
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;
});
iframe에 무언가를 게시 한 다음 json 구문 분석으로 iframe의 내용을 다시 읽습니다. 그래서 때로는 json 문자열이 아닙니다.
이 시도:
if(response) {
try {
a = JSON.parse(response);
} catch(e) {
alert(e); // error in the above string (in this case, yes)!
}
}
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();
더 읽기 :
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);
}
}
"첫 번째 매개 변수"를 굵게 표시 한 이유 JSON.parse()
는 두 번째 매개 변수로 reviver 기능을 사용하기 때문입니다.
당신은 이것을 시도 할 수 있습니다 :
Promise.resolve(JSON.parse(response)).then(json => {
response = json ;
}).catch(err => {
response = response
});
JSON.parse ()의 인수를 JSON 객체로 구문 분석 할 수없는 경우이 약속은 해결되지 않습니다.
Promise.resolve(JSON.parse('{"key":"value"}')).then(json => {
console.log(json);
}).catch(err => {
console.log(err);
});
참고 : https://stackoverflow.com/questions/4467044/proper-way-to-catch-exception-from-json-parse
반응형
'IT story' 카테고리의 다른 글
일관되지 않은 줄 끝을 정규화하면 Visual Studio의 의미는 무엇입니까? (0) | 2020.04.14 |
---|---|
가장 간단한 SOAP 예 (0) | 2020.04.14 |
왜 정적 중첩 인터페이스가 Java에서 사용됩니까? (0) | 2020.04.14 |
Sublime over SSH를 사용하는 방법 (0) | 2020.04.14 |
JavaScript를 사용하여 Caps Lock이 켜져 있는지 어떻게 알 수 있습니까? (0) | 2020.04.14 |