359 Stimmen

Richtiges Abfangen der Ausnahme von JSON.parse

Ich benutze JSON.parse auf eine Antwort, die manchmal eine 404-Antwort enthält. Gibt es in den Fällen, in denen 404 zurückgegeben wird, eine Möglichkeit, eine Ausnahme abzufangen und dann einen anderen Code auszuführen?

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

550voto

UltraInstinct Punkte 41505

Ich poste etwas in einen iframe und lese dann den Inhalt des iframe mit json parse zurück...also ist es manchmal kein json string

Versuchen Sie dies:

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

25voto

Sky Voyager Punkte 11257

Wir können error & 404 statusCode überprüfen, und verwenden try {} catch (err) {} .

Versuchen Sie dies:

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

Lesen Sie mehr :

18voto

ubuntugod Punkte 522

Ich bin ein ziemlicher Neuling in Sachen Javascript. Aber das ist, was ich verstanden habe: JSON.parse() gibt zurück. SyntaxError Ausnahmen, wenn ungültiges JSON als seine erster Parameter . So. Es wäre besser, diese Ausnahme als solche abzufangen, etwa wie folgt:

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

Der Grund, warum ich die Worte "erster Parameter" fett gedruckt habe, ist, dass JSON.parse() erhält als zweiten Parameter eine Reviver-Funktion.

5voto

Kartik Malik Punkte 372

Wenn Sie nach einer verallgemeinerten Funktion für diese Aufgabe suchen, sollten Sie dies ausprobieren.

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

2voto

Bushra Mustofa Punkte 385

Ich empfehle Ihnen, diese als eine ES6-Best-Practice . Verwendung von Error Objekt

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

Die obige Antwort ist ebenfalls hilfreich,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X