Ich bin neu in Swift und JSON und habe Probleme. Ich habe mir alle möglichen Q & A's angeschaut und versucht den Rat einzubauen, aber schaffe es nicht richtig zu tun.Swift JSON Serialisierungsfehler
Ich habe den Server generieren JSON, die in Ordnung ist nach einem JSON Flusenprüfer (http://jsonlint.com).
einen Browser verwenden, ist die Antwort so:
[{ "Postalcode": "NW4 2JL"}, { "Postalcode": "NW4 2ES"}, { "Postalcode": "NW4 3XP"} , {"PostalCode": "NW4 4DU"}, {"PostalCode": "NW4 2HH"}, {"PostalCode": "NW4 2DR"}, {"PostalCode": "NW4 2DX"}]
Xcode gibt mir jedoch diesen Fehler:
Fehler, konnte nicht JSON parsen: Optional ([{"PostalCode": "NW4 2JL"}, {"PostalCode": "NW4 2ES"}, {"PostalCode" : "NW4 3XP"}, {"PostalCode": "NW4 4DU"}, {"PostalCode": "NW4 2HH"}, {"PostalCode": "NW4 2DR"}, {"PostalCode": "NW4 2DX"} ])
Was mich verwirrt, und ich kann keine Erklärung dafür finden, ist der 'Optional()' Teil. Davor ist die Fehlerbeschreibung so, wie ich sie geschrieben habe, in Zeile 12 (die einzige Nachricht, die das Wort 'sorry' enthält). Der JSON in der '()' sieht gut aus.
Kann mir jemand mitteilen, was ich hier falsch gemacht habe oder wo der 'Optional()' Text herkommt?
Dies ist der relevante Teil meines Codes:
let task = session.dataTaskWithRequest(request) { data, response, error in
guard data != nil else {
print("no data found: \(error)")
return
}
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? NSDictionary {
let success = json["success"] as? Int
print("Success: \(success)")
} else {
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Error, sorry, could not parse JSON: \(jsonStr)")
}
} catch let parseError {
print(parseError)
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: '\(jsonStr)'")
}
}
@Eric D: optionals könnte auch transitorisch sein, ich nehme an, sie sind da hinten kompatibel, nicht weil sie schlau sind –
@IanBell Optionals sind ein Schlüsselkonzept in Swift, Chris Lattner hat dies mehrfach gesagt. Sie gehen bald nirgendwohin. :) – Moritz
Wow, diese Seite ist gut. Sobald ich das gepostet habe, fand ich die Antwort woanders (http://stackoverflow.com/questions/8356842/how-to-use-nsjsonserialization). Wirklich leid. Die Lösung bestand darin, NSArray anstelle von NSDictionary zu verwenden, da die Antwort ein Array war. – Denis