JSON String zu NSDictionary mit Swift

8

Ich versuche, ein Wörterbuch aus Daten zu erstellen, die auf einem Server gespeichert sind. Ich erhalte die Daten, aber ich kann die Daten nicht in NSDictionary konvertieren. Ich glaube, dass sie in einem NSData -Objekt

gespeichert sind %Vor%

Diese Codezeile ist diejenige, die mir das Problem gibt, es wirft ein BAD_EXEC_INSTRUCTION .

MEINE Frage: Wie kann ich ein JSON in ein NSDictionary verwandeln?

    
Arafal 17.03.2015, 05:46
quelle

3 Antworten

11

Ihr Code führt keine Fehlerbehandlung durch. Aber es kann (und wenn diese Daten von einem Webdienst stammen, wird) auf mehrere Arten fehlschlagen.

  1. Sie müssen sicherstellen, dass Ihr Datenobjekt tatsächlich existiert
  2. Sie müssen sicherstellen, dass das Datenobjekt in JSON
  3. konvertiert werden kann
  4. Sie müssen sicherstellen, dass das JSON tatsächlich ein Dictionary
  5. enthält

Sie sollten die Swift-bedingte Besetzung und die optionalen Bindefunktionen verwenden.
Die optionale Bindung if let JSONData = JSONData überprüft, dass JSONData nicht null ist. Der von Ihnen verwendete Befehl "unwrap" ( JSONData! ) stürzt möglicherweise ab, wenn keine Daten empfangen werden konnten.

Die optionale Bindung if let json = NSJSONSerialization.JSONObjectWithData überprüft, ob die Daten in ein JSON-Objekt konvertiert werden können. Die bedingte Umwandlung as? NSDictionary überprüft, ob das JSON-Objekt tatsächlich ein Wörterbuch ist. Sie verwenden diese Prüfungen derzeit nicht, sondern Sie werfen die Objekte als NSDictionary ab. Welches wird abstürzen, wenn das Objekt nicht gültig json, oder wenn es kein Wörterbuch ist.

Ich würde so etwas empfehlen:

%Vor%

Sie könnten die Prüfungen 2 und 3 in eine Zeile zusammenführen und prüfen, ob NSJSONSerialization direkt ein NSDictionary erstellen kann:

%Vor%

Stellen Sie sicher, dass fatalError durch eine entsprechende Fehlerbehandlung in Ihrem Produktionscode ersetzt wird

    
Matthias Bauch 17.03.2015, 06:39
quelle
8

Update für Swift 2.

Jetzt müssen Sie es in einem try catch-Block verwenden.

%Vor%     
UlyssesR 18.03.2016 19:55
quelle
4

Hier gibt jsonResult die Antwort in NSDictionary :

%Vor%     
Ayan Khan 17.03.2015 05:56
quelle

Tags und Links