JSON 對象基本形式
var obj = {
"name": "張三",
"age": 25,
"skills": ["Java", "Python", "JS"],
"address": {
"city": "北京",
"zip": "100000"
},
"active": true
};
核心特點
| 特點 | 說明 |
| 鍵值對集合 | 無序、鍵唯一、鍵必須雙引號字符串 |
| 值類型豐富 | 字符串、數字、布爾、null、數組、對象 (嵌套) |
| 純文本格式 | 跨語言、跨平台、人類可讀、易傳輸 (HTTP API 標準) |
| 無註釋/函數 | 純數據描述,非編程語言 |
JSON vs Map vs List 異同
| 維度 | JSON Object | Map (HashMap) | List (ArrayList) |
| 數據結構 | 鍵值對樹 (巢狀) | 鍵值對扁平表 | 有序元素序列 |
| 鍵類型 | 只能字符串 | 任意對象 (需 equals/hashCode) | 無鍵,靠索引 |
| 值類型 | JSON 子類型 (遞歸) | 任意對象 | 任意對象 |
| 順序 | 標準無序 (實現常保留插入序) | HashMap 無序, LinkedHashMap 有序 | **嚴格有序** |
| 序列化 | 原生文本 (JSON.stringify) | 需庫 (Jackson/Gson) | 需庫 |
| 查詢 | 路徑表達式 (JSONPath) | get(key) O(1) | get(index) O(1) |
| 適用場景 | 配置、API傳輸、存儲、日志 | 緩存、索引、計數、分組 | 列表、隊列、有序集合 |
代碼互轉示例
// Java (Jackson)
ObjectMapper mapper = new ObjectMapper();
// JSON字符串 -> Map
String json = "{\"a\":1,\"b\":[2,3]}";
Map map = mapper.readValue(json, new TypeReference
常見誤區
- ❌
{a:1} 是合法 JSON → **鍵必須雙引號** {"a":1}。
- ❌ JSON 支持註釋 → **標準 JSON 不支持**,需用 JSONC/JSON5 或去註釋預處理。
- ❌ JSON 對象鍵有序 → **RFC 7159 規定無序**,雖然現代解析器 (JS V8, Jackson) 保留插入順序,但**不可依賴**。
總結
JSON 是**輕量級數據交換格式**,本質是「帶類型標籤的巢狀鍵值對文本」。Map 是內存中**高性能鍵值索引**,List 是**有序序列**。三者在序列化/反序列化時相互轉換,核心區別在於**鍵約束、順序保證、類型系統、使用場景**。