2016-11-01 5 views
-1

ich dieses JSON habenwie swiftyjson mit Werten von JSON bekommen

{ 
    "chatUsers":"[ 
    {"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"}, 
    {"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"}, 
    {"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"} 
    ]", 
    "chatsCount":3 
} 

jetzt habe ich diesen Code, um Daten aus der URL zu erhalten:

let StringUrl = NSURL(string: url) as NSURL! 
let Data = NSData(contentsOfURL: StringUrl) as NSData! 
let ReadableData = JSON(data: Data) 

let result = ReadableData["chatUsers"][0]["id"].string! as String // this should gives 5 

aber es gibt immer diese Fehlermeldung:

fatal error: unexpectedly found nil while unwrapping an Optional value

keine idee warum?

+2

Set Breakpoint, Debug-Schritt. herausgefunden, welche 0 ist null – antonio081014

+0

JSON-Format ist falsch, warum Rückwärts Schrägstrich zu jedem Schlüssel und Wert hinzugefügt wird, keine Notwendigkeit, diese –

+1

hinzufügen Mögliche Duplikat von [Was bedeutet "fataler Fehler: unerwartet gefunden Null beim Auspacken eines optionalen Werts" bedeuten? ] (http: // Stapelüberlauf.com/questions/32170456/was-tut-fatal-error-unerwartet-gefunden-nil-while-unwrapping-eine-optional-Wert) – rmaddy

Antwort

1

Es ist ein bisschen falsch mit dem Beispiel, das Sie oben angegeben haben, aber um Sie in die richtige Richtung zu bringen, lassen Sie mich Ihnen einen Rat geben und eine schnelle Lösung für Ihr Problem.

Zunächst einmal, starten Sie Ihre Variablen nicht mit einem Großbuchstaben. Es ist keine feste Regel oder irgendetwas, aber es ist besser, camelCase zu verwenden, da es Ihren Code lesbarer macht und Verwirrung vermeidet.

Zweitens, Sie tun viel Kraft Gießen und zwingen das Auspacken von optionalen Werten, die Ihre Anwendung anfällig für Abstürze aufgrund der gleichen Fehler machen Sie jetzt bekommen. Ich würde einen Blick auf das Folgende für einige bessere Anleitung werfen: https://stackoverflow.com/a/25195633/4660602

Drittens, wenn Sie auf SO, bitte stellen Sie sicher, dass Sie klar Ihre Frage Kontext als einige Benutzer möglicherweise glauben, dass Sie eine Frage stellen, was optionals sind und warum Sie erhalten den fatal error: unexpectedly found nil while unwrapping an Optional value Fehler.

Mit diesem gesagt, in der Zukunft bitte sehen Sie sich die SwiftyJSON Dokumente, wie sie ziemlich deutlich zeigen, wie die Bibliothek zu verwenden. Der Grund, warum Ihr Code nicht funktioniert, liegt darin, dass Sie den JSON nicht korrekt verarbeiten. Hier ist ein aktualisiertes Beispiel:

let StringUrl = NSURL(string: url) as NSURL! 
    let Data = NSData(contentsOfURL: StringUrl) as NSData! 
    let ReadableData = JSON(data: Data) 
    let chatUsers = ReadableData["chatUsers"].arrayValue 
    let result = chatUsers[0]["id"].stringValue 

oder wenn Sie alle Nutzer zu durchlaufen:

let StringUrl = NSURL(string: url) as NSURL! 
    let Data = NSData(contentsOfURL: StringUrl) as NSData! 
    let ReadableData = JSON(data: Data) 

    for chatUser in ReadableData["chatUsers"]{ 
     print(chatUser.1["id"].stringValue) 
    } 

Bitte beachten Sie, ich nicht aktualisieren Sie Ihre Variablenbezeichner auf die richtige Konvention zum Zwecke der nicht verwirrend Sie, aber Sie sollten wirklich die richtige Konvention folgen, wie ich in meinem ersten Punkt erwähnt habe.

Viel Glück.

BEARBEITEN: Vergessen Sie zu erwähnen, dass Ihr JSON falsch formatiert ist. Bitte korrigieren Sie Ihre JSON-Daten im richtigen JSON-Format, damit SwiftyJSON sie korrekt interpretieren kann. Sie erhalten den Index außerhalb des gültigen Bereichs, da SwiftyJSON NICHT weiß, dass chatUsers ein Array ist, da die eckigen Klammern in doppelte Anführungszeichen eingeschlossen sind, wenn dies nicht der Fall sein sollte. So

"chatUsers":"[ 
{"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"}, 
{"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"}, 
{"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"} 
]" 

sollte für Schritt

"chatUsers": [ 
{"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"}, 
{"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"}, 
{"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"} 
] 
+0

Hallo, danke für deine Antwort, ich folgte deinem Code, aber es gibt mir: fataler Fehler: Index außerhalb des Bereichs –

+0

Sieh dir das Update als Antwort an –

+0

aha jetzt war das das Problem, das ich gesucht habe : D, vielen Dank für die Antwort und für die Tipps, die Sie zur Verfügung gestellt haben, sind sie wirklich hilfreich –

Verwandte Themen