串接 API 不能不懂的 JSON

開發 iOS App 時,我們時常串接後台的 API,將後台回傳的 JSON 資料顯示在 App 畫面上,因此看懂 JSON 是十分重要的一件事。接下來就讓我們試著了解 JSON 跟學習快速看懂它的小技巧吧。

JSON 是什麼 ?

JSON 是一種資料格式,主要以 [ ],{ },字串,數字 & bool(true或false) 描述資料的內容。

[ ] 表示 array,比方以下 [ ] 裝著 6 首好聽的小xx 情歌。

["小幸運", "小酒窩", "小蘋果", "小情歌", "小星星", "小夫妻"]

{ } 表示物件,以 : 描述物件的內容,: 的左邊是 key,右邊是 value,比方 "song": "小幸運" 表示 song 的內容是小幸運,以下 { } 的物件表示歌名是小幸運,歌手是田馥甄,電影是我的少女時代。(ps: 也可以把物件的概念想成 Swift 的 dictionary)

{"song": "小幸運", "singer": "田馥甄", "movie": "我的少女時代"}

JSON 厲害的地方在於它可以包很多層,array 裡的資料可以是物件,物件的某個 key 的內容可以是 array,比方以下例子:

  • array 的每個成員是物件。
[ 
{"name":"我的少女時代", "song":"小幸運"},
{"name":"擺渡人", "song":"十年"}
]
  • 物件的 singer 是 array。
{
"song": "小夫妻",
"singer": ["歐得洋", "蔡淳佳"]
}
  • 超多層的 JSON 例子。

以虎克船長為例,以下 JSON 感覺永遠寫不完,有興趣的朋友也可以用自己當例子,模仿虎克船長寫寫自己的 JSON。

以物件描述虎克船長,他有個 key 是女朋友,內容是 array。(因為很多女朋友)
array 的成員是物件,分別代表歷任女朋友。
女朋友有個 key 是前男友,內容是 array。(因為很多前男友)
array 的成員是物件,分別代表歷任前男友。
前男友有個 key 是妹妹,內容是 array。(因為很多妹妹)
array 的成員是物件,分別代表每個妹妹。

JSON 實例

  • 串接 API 抓 JSON。

了解 JSON 的基本概念後,讓我們看看真實 API 的 JSON 例子。透過以下 iTunes API 的網址,我們可以抓取歌手蔡淳佳的歌曲資訊。

https://itunes.apple.com/search?term=蔡淳佳&media=music&country=TW

從 Safari 輸入網址按 enter 後,它會自動下載變成文字檔,然後以內建的 TextEdit 打開。

  • 請 AI 產生 JSON。

剛剛我們看了許多 JSON 的例子,不過這樣的 JSON 實在不易觀看,看得心好累,接下來讓我們學習快速看懂它的小技巧吧。

將 JSON 排得美美的網站

網路上有很多網站可以幫我們將 JSON 排得美美的,比方 JSON Editor Online。

喜歡靠自己,不想透過別人的網站幫忙嗎 ? 沒關係,我們也可以在 Safari 安裝外掛,直接讓 Safari 美美地呈現 JSON。

如何區分 array & 物件

初學者常會搞混 JSON 裡的 array & 物件,因為 [ ]& { } 很像,就像常有人搞混彼得潘跟劉德華,因為彼得潘跟劉德華都是黑髮大眼十根手指的男人。

其實 array & 物件有很多不同的地方,我們可透過以下線索區分。

  • array 是 [ ],物件是 { }。
  • 當內容以 : 分隔時即表示容納資料的是物件,例如
{"song": "小幸運", "singer": "田馥甄", "movie": "我的少女時代"}
  • 觀察 JSON Editor Online 網站右邊區塊的括號。

如下圖所示,以 { } 包含數字的為物件,因此一開始的 {2} 表示 JSON 的第一層是物件,有 2 個 key。[50] 表示 results 的內容為 array,有 50 筆資料。results 展開後的數字 0,1,2 分別代表 array 的第一筆,第二筆,第三筆資料,而 {31} 則代表 array 的成員是物件,它有 31 個 key。

以下 JSON 內容紅色代表數字,綠色為字串,true 則為 Bool。

從 Terminal 的 curl 抓取 JSON

我們也可以利用 curl 指令抓取 JSON,例如以下指令將抓取隨機的 Meme。

curl https://some-random-api.ml/meme

結果

方便測試 API & 研究 JSON 的 Postman

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com