學習Swift之旅#9 — 串接第三方 API,解析 JSON 資料,轉換成自訂型別顯示

Vivienne Chen
5 min readDec 19, 2020

--

彼得潘作業#15–4 研究有哪些回傳 JSON 格式資料的有趣第三方 API,讀取資料做一個 App 。

作業目的

學習利用 URLSession 抓取後台的 JSON 資料,利用 JSONDecoder 和 Codable 將 JSON 資料生成自訂型別。

流程

以 iTunes 搜尋 Taylor Alison Swift 當例子,API 的網址為

https://itunes.apple.com/search?term=TaylorAlisonSwift&media=music

後台回傳的資料利用網站 JSON Editor Online 顯示後如下:

按照 iTunes 回傳的 JSON ,第一層是 object,object key results 的資料是 array,array 裡裝了許多歌曲 object。

因此定義了型別 SearchResponse 對應第一層的 object, StoreItem對應歌曲的object,並將 property results 的型別宣告為 [StoreItem],說明它是 array。

這裏將 SearchResponse & StoreItem 分開定義(也可寫一起定義)。

struct SearchResponse:Codable {
let resultCount: Int
let results: [StoreItem]
}
struct StoreItem:Codable {
let artistName: String
let trackName:String // 曲名
let collectionName:String? // 專輯名稱
let previewUrl:URL
let artworkUrl100:URL // image url
let trackPrice:Double? // 價錢
let releaseDate:Date
let isStreamable:Bool?
}

其中,StoreItem 的部分 property 被宣告為 optional,因為 JSON 裡有些 key 不會每一筆資料都有,像是trackPrice,不是每首歌都可以買,所以不一定有 trackPrice。因此將不一定會有的 collectionName、trackPrice 及isStreamable 設為 optional。如果沒有設為 optional,到時候一旦發現沒有這些欄位,將造成轉換失敗。

從回傳的資料得知時間格式採用 iso8601

抓取網路資料,使用JSONDecoder將JSON轉換成SearchResponse型別的資料。

成果

顯示音樂清單

參考資料

之後補充

[作業 6: viewDidLoad,array & custom controller class] 6–2 : 模仿 iOS 的 Music App 製作情歌點唱機,可忽略進階功能

--

--

Vivienne Chen

微微的涼風 吹起懶洋洋的帆 載著淡淡的 心 悠遊自在