javascript - Rätt sätt att fånga undantag från JSON.parse


Jag använder JSON.parse på ett svar som ibland innehåller ett 404-svar. I de fall då det returnerar 404, finns det ett sätt att fånga ett undantag och sedan köra någon annan kod?

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

Svar #1

Jag postar något i en iframe och läser sedan tillbaka innehållet i iframen med json parse... så ibland är det inte en json-sträng

Prova detta:

if (response) {
    let a;
    try {
        a = JSON.parse(response);
    } catch (e) {
        return console.error(e); // error in the above string (in this case, yes)!
    }
    // if no error, we can now keep using "a"
}

Svar #2

Vi kan kontrollera fel- och 404-statuskod, och använda try {} catch (err) {}.

Du kan prova detta:

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

Läs mer :

  • Fånga ett 404-fel för XHR

Svar #3

Jag är ganska ny på Javascript. Men detta är vad jag har förstått: JSON.parse() returnerar SyntaxError-undantag när ogiltig JSON ges som dess första parameter. Så. Det skulle vara bättre att fånga det undantaget som följer:

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

Anledningen till att jag gjorde orden "första parametern" fetstil är att JSON.parse() tar en reviver-funktion som sin andra parameter.

Relaterade artiklar