Vibe Coder

JSON 與 API 資料流:看懂 JSON 就看懂所有 API 的輸出

JSON 是文字格式的資料交換標準,本質上就是 Python dict 的文字版本,要先轉換成 dict 之後才能操作。API 呼叫分成發送請求、確認成功、解析 JSON、取出值四個步驟,每一步都可能出問題,看懂狀態碼就能快速定位。
JSON 與 API 資料流:看懂 JSON 就看懂所有 API 的輸出

JSON 與 API 資料流:看懂 JSON 就看懂所有 API 的輸出

天氣、支付、地圖、社群媒體,幾乎所有 API 都用 JSON 溝通。你已經懂 dict 了,這裡的好消息是:JSON 就是 dict 的文字版本,差別只在格式和怎麼解析,看懂它等於看懂了所有 API 的輸出。

你將學到什麼

JSON 就是 dict 的文字版

六種值型別,和 Python 型別幾乎一一對應。

API 資料流四步驟

發送請求、確認成功、解析 JSON、取出值,每步都可能出錯。

讀懂巢狀結構

多層取值逐層念,就不會被層層 dict 和 list 搞混。

常見狀態碼與解法

200 到 500,看到數字就知道下一步該做什麼。

為什麼 Vibe Coder 必須懂 JSON 和 API 資料流

幾乎所有 API 都用 JSON 溝通,看懂它等於看懂所有 API 的輸出。API 資料流也是最常出 bug 的地方:API 有沒有打出去、回傳了什麼、取值取對了嗎,每一步都可能出問題。這一節學好,後面碰到串接第三方服務會事半功倍。

JSON 是什麼:Python dict 的文字版本

{"name": "Joan", "age": 30, "cities": ["Taipei", "Tokyo"]}
JSON 只有六種值字串、數字、布林值、空值、陣列對應 list、物件對應 dict,和 Python 型別幾乎一一對應。差別在於 JSON 傳過來時是文字格式,key 一定是雙引號字串,要轉換之後才能像操作 dict 一樣操作它。

API 資料流:從呼叫到取值四步驟

import requests

response = requests.get(
    "https://api.example.com/weather",
    params={"q": "Taipei", "units": "metric"}
)

if response.status_code != 200:
    result = None
else:
    data = response.json()
    result = data["main"]["temp"]
步驟關鍵動作可能出的問題
發送請求呼叫 API 並帶上參數網路錯誤、網址寫錯、金鑰無效
確認成功檢查狀態碼狀態碼不是 200 就代表沒成功
解析 JSON把文字轉成 dict回傳的不是 JSON 格式時會解析失敗
取出值用 key 逐層取值key 不存在,或巢狀結構取錯層
① 發送請求呼叫 API 並帶參數② 確認成功檢查狀態碼是否為 200③ 解析 JSON把文字轉成 dict④ 取出值用 key 逐層取值
從呼叫到取值,四個步驟每一步都可能出錯,先定位在哪一步。

讀懂巢狀 JSON 結構

{
  "name": "Taipei",
  "main": {"temp": 28.5, "humidity": 75},
  "weather": [{"id": 800, "description": "clear sky"}]
}
多層取值逐層念取 main 這個 dict,再取裡面的 temp,就是溫度。取 weather 這個 list,取第一個元素,再取它的 description,就是天氣描述。看到多層取值,照著這個順序逐層念出來就能理解,不用一次想懂全部。

常見 API 狀態碼與解法

狀態碼意思第一步怎麼處理
200成功繼續往下取值
400請求格式錯誤對照 API 文件確認參數名稱
401未授權確認金鑰正確,且放在正確位置
403沒有權限確認方案有沒有這個 API 的存取權限
404找不到確認網址和路徑有沒有打對
429超過呼叫限制加上延遲,或考慮升級方案
500伺服器錯誤通常是對方問題,稍後再試

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

JSON 和 Python 的 dict 是同一件事嗎?
概念上幾乎一樣,差別在 JSON 是文字格式,key 一定是雙引號字串。收到 API 回傳的 JSON 後,要先轉換成 dict,才能用 key 取值。
API 回傳 401 代表什麼?
代表未授權,通常是金鑰無效、過期,或根本沒有傳出去。要確認金鑰是否正確,並且放在 API 要求的正確位置,例如標頭或參數裡。
巢狀 JSON 要怎麼取值才不會出錯?
逐層念出取值路徑,先確定要取哪一層的 dict 或 list,再往下一層取。取值前先用安全取值的方法確認 key 存在,可以避免直接出錯。
API 呼叫最容易在哪一步出問題?
四個步驟都可能出錯,最常見的是狀態碼不是 200 卻沒有先判斷就直接解析,或是巢狀結構取值取錯層,導致 key 不存在的錯誤。