我是Swift和JSON的新手,遇到了麻煩。我已經在這裏看過各種Q & A,並試圖引入這些建議,但是我沒有正確地做到這一點。Swift JSON序列化錯誤
我有服務器根據JSON皮棉檢查器(http://jsonlint.com)生成JSON。
使用瀏覽器的響應是這樣的:
[{ 「郵編」: 「NW4 2JL」},{ 「POSTALCODE」: 「NW4 2ES」},{ 「POSTALCODE」: 「NW4 3XP」} ,{「PostalCode」:「NW4 4DU」},{「PostalCode」:「NW4 2HH」},{「PostalCode」:「NW4 2DR」},{「PostalCode」:「NW4 2DX」}]
Xcode ,但是,給我這個錯誤:
錯誤,抱歉,無法解析JSON:可選([{「PostalCode」:「NW4 2JL」},{「PostalCode」:「NW4 2ES」},{「PostalCode」 :「NW4 3XP」},{「PostalCode」:「NW4 4DU」},{「PostalCode」:「NW4 2HH」},{「PostalCode」:「NW4 2DR」},{「PostalCode」:「NW4 2DX」} ])
什麼讓我感到困惑,我找不到解釋,是'Optional()'部分。在此之前,錯誤陳述正如我在第12行(唯一包含「對不起」一詞的消息)所寫的那樣。 '()'內的JSON看起來很好。
任何人都可以建議我在這裏做錯了什麼,或者至少在'可選()'文本來自哪裏?
這是我的代碼的相關部分:
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:可選項也可能是短暫的,我想他們出於回溯兼容性的原因,並不是因爲他們聰明 –
@IBelBell可選項是Swift的一個關鍵概念,Chris Lattner多次說過。他們很快就不會去。 :) – Moritz
哇這個網站是好的。只要我發佈這個,我在其他地方找到了答案(http://stackoverflow.com/questions/8356842/how-to-use-nsjsonserialization)。真對不起。解決方案是使用NSArray而不是NSDictionary,因爲,響應是一個數組。 – Denis