Modo corretto per rilevare l’eccezione da JSON.parse

Sto usando JSON.parse su una risposta che a volte contiene una risposta 404. Nei casi in cui restituisce 404, esiste un modo per rilevare un’eccezione e quindi eseguire un altro codice?

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

pubblico qualcosa in un iframe, poi rileggo il contenuto dell’iframe con json parse … quindi a volte non è una stringa json

Prova questo:

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

Possiamo controllare l’errore & 404 statusCode e usare try {} catch (err) {} .

Puoi provare questo:

 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 + "
Your isp : " + json.org; }; req.open("GET", "https://ipapi.co/json/", true); req.send();

Sono abbastanza nuovo per Javascript. Ma questo è quello che ho capito: JSON.parse() restituisce eccezioni SyntaxError quando JSON non valido viene fornito come primo parametro . Così. Sarebbe meglio prendere quell’eccezione come tale come segue:

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

Il motivo per cui ho messo in grassetto le parole “first parameter” è che JSON.parse() prende come secondo parametro una funzione di reviver.

Questa promise non si risolverà se l’argomento di JSON.parse () non può essere analizzato in un object JSON.

 Promise.resolve(JSON.parse('{"key":"value"}')).then(json => { console.log(json); }).catch(err => { console.log(err); });