單元 5 · 巢狀結構與實務模式

常見資料形狀一眼看懂 — Nesting & Patterns

巢狀規則本身很簡單:物件與陣列任意互包。真正的學問在於「真實資料的形狀」—— 這頁帶你認識最常見的四種模式。

模式一:陣列物件 · Array of Objects

API 列表回傳的最常見形狀。每筆資料一個物件,全部包在陣列裡。

JSON · 原始碼
[
  { "id": 1, "name": "Alice", "role": "dev" },
  { "id": 2, "name": "Bob",   "role": "ops" }
]

讀法:它是「一列使用者」。資料庫表格、REST 列表通常就是這樣。

模式二:包裝物件 · Wrapper Object

很多 API 會把資料包進 dataresult,順便帶 meta(總數、分頁)。

JSON · 原始碼
{
  "data": [ { "id": 1, "name": "Alice" } ],
  "meta": { "total": 1, "page": 1 }
}

模式三:巢狀物件 · Nested Objects

把相關欄位包成子物件,避免扁平的一堆鍵。讀取時用 點路徑user.profile.avatar)。

JSON · 原始碼
{
  "user": {
    "profile": {
      "avatar": "alice.png",
      "bio": "hi"
    }
  }
}
讀取路徑 · PATHS
JS    user.profile.avatar
Python user["profile"]["avatar"]
jq    .user.profile.avatar

模式四:鍵值映射 · Key-Value Map

鍵當「名稱」、值當「資料」——例如語言翻譯表或 ID 查詢表。注意:物件是無序的,不能當保證順序的清單用。

JSON · 原始碼
{
  "en": "Hello",
  "zh-TW": "你好",
  "ja": "こんにちは"
}
重要:物件是無序的。需要保證順序的資料(如排行榜)請用陣列, 不要靠物件的鍵順序。

實務:完整 API 回應

把四種模式組合起來,就是一份真實 API 回應:

GET /api/users / RESPONSE

{
  "status": "ok",
  "data": [
    {
      "id": 1,
      "name": "Alice",
      "profile": { "role": "dev", "tags": ["js", "json"] },
      "active": true
    },
    {
      "id": 2,
      "name": "Bob",
      "profile": { "role": "ops", "tags": ["aws"] },
      "active": false
    }
  ],
  "meta": { "total": 2, "page": 1 }
}

解讀 · EXPLAINED

status:狀態字串。

data:陣列物件——每筆是一個使用者。

profile:巢狀物件 + 陣列標籤。

meta:包裝物件的分頁資訊。

讀取 Alice 的 tags:data[0].profile.tags

看完這頁你應該能說出:
  • 四種常見資料形狀:陣列物件、包裝物件、巢狀物件、鍵值映射。
  • 物件是無序的,有序資料要用陣列。
  • 用「點路徑」讀取巢狀資料的方式。
  • 如何解讀一份完整 API 回應。

延伸閱讀