2013-06-17 26 views
8

Nach dem Testen kann ich nur [NSJSONSerialization isValidJSONObject:] erhalten, um ein positives Ergebnis für JSON-Daten zurückzugeben, die ich bereits mit [NSJSONSerialization JSONObjectWithData:options:error:] analysiert habe.isValidJSONObject funktioniert nicht wie erwartet

Nach dem official documentation:

isValidJSONObject einen Booleschen Wert zurückgibt, die ein bestimmtes Objekt zeigt an, ob zu JSON-Daten umgewandelt werden können.

Doch trotz der Tatsache, dass die Objekte, die ich von JSON zu einer NSDictionary konvertieren feine zu konvertieren bin versucht, isValidJSONObject kehrt NO.

Hier ist mein Code:

NSURL * url=[NSURL URLWithString:urlString]; 
NSData * data=[NSData dataWithContentsOfURL:url]; 
NSError * error=[[NSError alloc] init]; 
NSMutableDictionary * dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 

if([NSJSONSerialization isValidJSONObject:data]){ 
    NSLog(@"data is JSON"); 
}else{ 
    NSLog(@"data is not JSON"); 
} 

if([NSJSONSerialization isValidJSONObject:dict]){ 
    NSLog(@"dict is JSON"); 
}else{ 
    NSLog(@"dict is not JSON"); 
} 

NSLog(@"%@",dict); 

Mein Protokoll enthält die folgenden:

data is not JSON 
dict is JSON 

und dann die Ausgabe von dict, die an dieser Stelle ist ein riesiges NSMutableDictionary Objekt. Bei der Ausführung dieses Codes werden keine Fehler generiert, aber isValidJSONObject scheint bei Ausführung unter data den falschen Wert zurückzugeben.

Wie kann ich isValidJSONObject funktionieren wie erwartet?

+0

Dies ist verschwendete Bewegung: 'dict = [[NSMutableDictionary Alloc] Init];' –

+0

@Hot Licks wie würden Sie vorschlagen, dass ich das tue? – Jimmery

+0

ok, ich werde diese Zeile entfernen. Danke für den Hinweis. – Jimmery

Antwort

23

isValidJSONObject Tests, wenn ein Objekt JSON (a NSDictionary oder NSArray) kann erfolgreich sein zu JSON Daten umgewandelt.

Es ist nicht zum Testen, wenn ein NSData Objekt gültige JSON Daten enthält. Um zu testen, für die gültigen JSON-Daten rufen Sie einfach

[NSJSONSerialization JSONObjectWithData:data ...] 

und prüfen, ob der Rückgabewert nil ist oder nicht.

+1

ah, ok, wie immer mache ich es falsch! :) Danke für die Antwort. – Jimmery

+2

Ich habe dies versucht, aber JSONObjectWithData stürzt ab, wenn Daten kein gültiger JSON ist. – LuisEspinoza

+2

@LuisEspinoza: Meiner Erfahrung nach gibt JSONObjectWithData nil (und setzt den Fehlerparameter), wenn die Daten nicht gültig JSON ist. –

Verwandte Themen