2015-03-25 16 views
7

Ich arbeite derzeit an einer App, die json zurückbringt, in folgendem FormatWie überprüft man, ob JSON in swift null ist?

"location_subtype" = "somevalue"; "location_type" = Kraft; Monat = "2015-01"; "Ergebnis_Status" = { Kategorie = "Somevalue"; Datum = "Somevalue"; };

wenn die „outcome_status“ Wert zeigt es Kategorie und Datum jedoch, wenn das „outcome_value“ hat keinen Wert (was in den meisten Fällen ist) wird gezeigt, wie unten

" location_subtype "=" somevalue "; "location_type" = Kraft; Monat = "2015-01"; "outcome_status" = ""; "persistent_id" = "";

Die Frage ist, wie kann ich überprüfen, ob der Wert für outcome_status nicht "null" ist?

Ich habe versucht, die Kategorie und das Datum in Etikett zu speichern, aber es läuft in Fehler, die erste if-Anweisung sollte prüfen, ob der Wert nicht null ist und wenn nicht zur nächsten if-Anweisung gehen. Allerdings geht es weiter zum nächsten if-Anweisung und ich erhalte die folgenden Fehler

Gewinde 1: EXC_BAD_ACCESS (code = 2, Adresse = 0x102089600)

if (dict["outcome_status"] != nil) 
     { 
      if ((dict["outcome_status"]as NSDictionary)["category"] != nil) 
      { 
       outcomeStatusLabel.text = ((dict["outcome_status"]as NSDictionary)["category"] as NSString) 
       outcomeStatusLabel.font = UIFont.systemFontOfSize(14.0); 
       outcomeStatusLabel.numberOfLines = 0 
      } 

      if ((dict["outcome_status"]as NSDictionary)["date"] != nil) 
      { 
       outcomeDateLabel.text = ((dict["outcome_status"]as NSDictionary)["date"] as NSString) 
       outcomeDateLabel.font = UIFont.systemFontOfSize(14.0); 
       outcomeDateLabel.numberOfLines = 0 
      } 
     } 

Wenn ich die ersten entfernen if-Anweisung nur stürzt bei "outcome_status" = "null" ab und funktioniert einwandfrei, wenn ein Wert in "outcome_status"

Was muss ich tun, damit es bei der 1. if-Anweisung stoppt, wenn der Wert = null ist?

Vielen Dank im Voraus.

+0

@MartinR wenn ich versuche, die folgende 'if (dict [ "outcome_status"] als NSString! = "") 'es stürzt immer noch ab. – chirag90

Antwort

17

so etwas wie dieses Versuchen:

Swift Code:

if let outcome = dict["outcome_status"] as? NSDictionary { 
    //Now you know that you received a dictionary(another json doc) and is not 'nil' 
    //'outcome' is only valid inside this if statement 

    if let category = outcome["category"] as? String { 
     //Here you received string 'category' 
     outcomeStatusLabel.text = category 
     outcomeStatusLabel.font = UIFont.systemFontOfSize(14.0) 
     outcomeStatusLabel.numberOfLines = 0 
    } 

    if let date = outcome["date"] as? String { 
     //Here you received string 'date' 
     outcomeDateLabel.text = date 
     outcomeDateLabel.font = UIFont.systemFontOfSize(14.0) 
     outcomeDateLabel.numberOfLines = 0 
    } 
} 

Dies ist eine sichere Art und Weise mit Json zu arbeiten.

+1

Danke, das klappt prima, die App stürzt jetzt nicht ab. – chirag90

+0

Ehrfürchtig ... Ich hatte überhaupt keine traurigen Pfade bearbeitet und meine Apps stürzten auf einen traurigen Pfad:/ –

+0

Dieses Beispiel arbeitet mit Strings ... aber mit anderen Typen funktioniert nicht. Ich denke, die beste Lösung ist @NunoFerro http://StackOverflow.com/a/37468020/4693765 –

0

Try Swift-Klasse folgende Objective C-Klasse entspricht,

dict["outcome_status"] != [NSNull null] 
6
if ((nullObject as? NSNull) == nil) { 
     ... 
     } 
-1

Hinweis - dies wird nur für die tatsächlichen „null“ Werte arbeitet aus dem JSON kommen, da diese diejenigen NSNull Instanzen umgewandelt werden, genauer in das [NSNull null] Singleton Wert - z.B.{"someKey":null}:

if !(parsedJSON["someKey"] is NSNull) { 
    //do your stuff 
} 

oder alternativ:

if parsedJSON["someKey"] != NSNull.null() { 
    // do your stuff 
} 

oder auch ausgefallenere:

if let someVal = parsedJSON["someKey"] where !(someVal is NSNull) { 
    // we get here only if the key exists, and is not NSNull 
} 
+0

Kein Null-Check in swift arbeiten –

+0

@ iPhone6 ​​kannst du das näher ausführen ? Ich glaube nicht, dass ich Ihren Standpunkt verstanden habe. Danke – Cristik

+0

Dies funktioniert nicht in Swift, ich bekomme Antwort von API als "interessed_in" = ""; Verwendete Ihre obige Methode, stürzt aber immer noch ab. Deshalb habe ich oben gesagt, funktioniert nicht so schnell hat keine Lösung für solche Nullen. –

Verwandte Themen