6 Stimmen

Überprüfen, ob die Antwort von der API gültiges JSON ist

Gibt es eine Möglichkeit mit NSJSONSerialization zu überprüfen, ob die NSData gültiges JSON ist? Ich möchte nicht, dass die Anwendung einen Fehler ausgibt, wenn die API aus irgendeinem Grund ungültiges JSON zurückgibt.

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

30voto

hypercrypt Punkte 15316

Dies wird nicht zu einem Fehler führen, es wird einfach null zurückgeben, wenn das JSON nicht gültig ist. Daher wäre der Test, um zu sehen, ob es gültiges JSON ist, wie folgt:

NSError *error;
if ([NSJSONSerialization JSONObjectWithData:data
                                    options:kNilOptions
                                      error:&error] == nil)
{
    // Fehler behandeln
}

Wenn es tatsächlich null zurückgibt, können Sie error überprüfen, um zu sehen, was schief gelaufen ist.

7voto

Alladinian Punkte 33464

NSJSONSerialization-Klasse hat eine Methode, dies genau zu tun... (EDIT: nein, das tut es nicht...)

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
id jsonObj = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
BOOL isValid = [NSJSONSerialization isValidJSONObject:jsonObj];

EDIT: (Nach dem Kommentar von hypercrypt)

Hypercrypt hat recht (ich verstehe wirklich nicht, wie ich das übersehen konnte)... Auch wenn meine Antwort zu funktionieren scheint, ist sie falsch. Was die Methode isValidJSONObject: tut, ist zu prüfen, ob ein Objekt in JSON serialisiert werden kann und nicht andersherum. Seine Antwort ist also das, wonach du suchst. Du könntest diese Methode jedoch nutzen, wenn du eine veränderbare Kopie eines JSON-Datenpakets bekommst, es veränderst und später überprüfen möchtest, ob es sicher ist, es wieder in einen JSON-String umzuwandeln. Aber letztendlich ist die Antwort von hypercrypt die richtige und ich denke, es wäre mehr als fair, seine Antwort als korrekt zu markieren anstelle meiner. Wie auch immer, entschuldige jegliche Verwirrung und danke @hypercrypt dafür, dass du das angemerkt hast :)

0voto

JoshRagem Punkte 577

Es gibt nicht wirklich eine Möglichkeit, die Daten zu überprüfen, ohne das Objekt mit NSJSONSerialization zu erstellen. Ich würde es in einen try-catch-Block setzen. Wenn du im catch-Block landest, handelt es sich nicht um gültiges JSON.

EDIT: Wenn es einen Fehler gab, handelt es sich bei 'error' um ein Fehlerobjekt. Auch wenn nichts geworfen wird, kannst du das überprüfen, um zu sehen, ob die Daten gültig waren.

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