常見資料形狀一眼看懂 — Nesting & Patterns
巢狀規則本身很簡單:物件與陣列任意互包。真正的學問在於「真實資料的形狀」—— 這頁帶你認識最常見的四種模式。
API 列表回傳的最常見形狀。每筆資料一個物件,全部包在陣列裡。
[ { "id": 1, "name": "Alice", "role": "dev" }, { "id": 2, "name": "Bob", "role": "ops" } ]
讀法:它是「一列使用者」。資料庫表格、REST 列表通常就是這樣。
很多 API 會把資料包進 data 或 result,順便帶 meta(總數、分頁)。
{ "data": [ { "id": 1, "name": "Alice" } ], "meta": { "total": 1, "page": 1 } }
把相關欄位包成子物件,避免扁平的一堆鍵。讀取時用 點路徑(user.profile.avatar)。
{ "user": { "profile": { "avatar": "alice.png", "bio": "hi" } } }
JS user.profile.avatar Python user["profile"]["avatar"] jq .user.profile.avatar
鍵當「名稱」、值當「資料」——例如語言翻譯表或 ID 查詢表。注意:物件是無序的,不能當保證順序的清單用。
{ "en": "Hello", "zh-TW": "你好", "ja": "こんにちは" }
把四種模式組合起來,就是一份真實 API 回應:
{
"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 }
}
status:狀態字串。
data:陣列物件——每筆是一個使用者。
profile:巢狀物件 + 陣列標籤。
meta:包裝物件的分頁資訊。
讀取 Alice 的 tags:data[0].profile.tags。