六種型別、兩種容器、任意巢狀 — Data Types
JSON 的全部資料,只有六種型別。沒有日期、沒有 undefined、沒有 BigInt—— 所有資料都必須用這六種表達。記住它們,就記住了 JSON 的全部。
| 型別 | 寫法 | 對應(Python / JS) |
|---|---|---|
| 字串 string | "..." 雙引號 | str / String |
| 數字 number | 42、3.14 | int / float · Number |
| 布林 boolean | true / false | bool / Boolean |
| null | null | None / null |
| 物件 object | { "k": v } | dict / Object |
| 陣列 array | [a, b] | list / Array |
{ "str": "hello", "int": 42, "float": 3.14, "bool": true, "none": null }
物件是無序的鍵值組。鍵必須是字串(雙引號),值可以是任何型別。
{ "name": "Alice", "age": 30 }
鍵 "name"(字串) └─ 值 "Alice"(字串) 鍵 "age"(字串) └─ 值 30(數字)
{name: "Alice"} 是合法的 JS 物件,卻是非法 JSON。
陣列是有序的清單,元素可以是任意型別(甚至混雜)。
["a", 1, true, null, [1,2]]
陣列 [ ] 的四個元素: 0: "a"(字串) 1: 1(數字) 2: true(布林) 3: null 4: [1, 2](巢狀陣列)
物件與陣列可以任意互相嵌套——這是真實世界資料的形狀。
{ "users": [ { "name": "Alice", "tags": ["dev"] }, { "name": "Bob", "tags": ["ops"] } ] }
物件
└─ users(陣列)
├─ 元素 0:物件 { name, tags }
│ └─ tags:陣列 ["dev"]
└─ 元素 1:物件 { name, tags }
└─ tags:陣列 ["ops"]
| 別的語言有 | JSON 要怎麼表達 |
|---|---|
| 日期 / 時間 | 用字串,慣用 ISO 8601(如 "2026-08-15T10:00:00Z") |
| undefined | 沒有對應;通常省略欄位或改用 null |
| BigInt / 大數字 | 精度有限(見單元 4),大數建議用字串 |
| 函式 / 物件實例 | 無法表示——JSON 只存資料,不存邏輯 |