在iOS App中使用JSONDecoder快速剖析JSON資料
戴谷州Ken Tai
- 恆逸教育訓練中心-資深講師
- 技術分類:Mobile行動應用開發
Swift 4開始提供了JSONDecoder 類別可以快速剖析從 Server 端接收 JSON 格式的資料。而 JSONDecoder.decode 方法所需輸入的參數必須是實作Decodable protocol的 struct 或 class。 要剖析的JSON資料:
[{
"id": "1",
"cate_name": "iPod touch"
}, {
"id": "2",
"cate_name": "iPod nano"
}, {
"id": "3",
"cate_name": "iPod shuffle"
}, {
"id": "4",
"cate_name": "iPhone"
}, {
"id": "5",
"cate_name": "iPad"
}, {
"id": "6",
"cate_name": "Apple原廠配件"
}]
首先,先定義資料型別,該型別必須實作Decodable protocol,並建立巢狀列舉型別CodingKeys,用來定義JSON資料的實際Key值。
struct Prod: Decodable {
let id: String
let name: String
enum CodingKeys : String, CodingKey {
case id
case name = "cate_name"
}
}
利用URLSession進行網路連線,並使用JSONDecoder().decode()方法將JSON字串直接轉換成先前定義的資料型別物件:
let url = URL(string:"http://ikenapp.appspot.com/json/getCategory.jsp")
let session = URLSession.shared
let task = session.dataTask(with: URLRequest(url: url!)) { (data, res, error) in
if error != nil{
print(error!)
return
}
guard let list = try? JSONDecoder().decode([Prod].self, from: data!) else {
print("Error: Couldn't decode data into Products")
return
}
for obj in list{
print("[\(obj.id)] : \(obj.name)")
}
}
task.resume()
輸出結果:
[1] : iPod touch
[2] : iPod nano
[3] : iPod shuffle
[4] : iPhone
[5] : iPad
[6] : Apple原廠配件
是不是很簡單!