JSONDecoder
將抓下來的資訊透過JSONDecoder這個將收集到的資訊進行使用
下面做個簡單的示範:
// 假設今天有個struct名為Price
struct Price:Codable{
var apple:Int
var banana:Int
var pineapple:Int
}
// 本地端建立一個json檔
let json = """
{
"apple":10,
"banana":20,
"pineapple":30
}
""".data(using: .utf8)!
// 建立一個JSONDecoder實例
let decoder = JSONDecoder()
// 透過解析json檔,將資料儲存在自定義的struct中
let price = try decoder.decode(Product.self,from:json)
// 印出10
print(price.apple)
需要注意JSON裡面是{}還是[]
使用[]符號的是Array
使用{}符號的是物件
這兩種在結構上存在差異:
struct decodeAll:Codable{
// 代表裡面是[]陣列,還有東西在裡面
let basket:[Ball]
// 代表是物件,直接使用裡面的名字即可
let basketball:String
}
// []陣列裡面的key-value搭配
struct Ball:Codable{
let Ballname:String
}
另外有個例子:
"Basket":["BasketBall"]
使用JSONEditorOnline看到的會是
Basket[1]
[0:"BasketBall"]
這樣要怎麼解決,通常會使用key值作為decode媒介,但是這個沒有key
這邊會使用
struct decodeBasket:Codable{
let Basket:[String]
}
直接將裡面的物件,用所屬的屬性decode
應用上會先使用URLSession進行網路連結
let url = URL(string:"http:.....")
let session = URLSession.shared
//
let task = session.dataTask(with:URLRequest(url:url!)){(data,res,error) in
// 會回傳(data,res,error)資料,下面的函式都是基於這三個回傳資料進行
if error != nil{
print(error!)
return
}
let decoder = JSONDecoder()
// 使用DecumentData作為decode的結構,這邊省略寫下DocumentData的詳細結構
guard document = try decoder.decode(DocumentData.self,from:data!)else{
print("ERROR")
return
}
}
task.resume()