JSON 完全入門指南:從零開始學習 JSON 語法與實際應用

JSON(JavaScript Object Notation)是現代網路開發中最重要的資料交換格式之一。無論您是前端開發者、後端工程師,還是資料分析師,理解和掌握 JSON 都是必備技能。本文將帶您從零開始,全面了解 JSON 的基礎概念、語法規則、實際應用,以及最佳實踐。

JSON 實際應用場景,包含網頁開發、API、行動應用等
JSON 實際應用場景,包含網頁開發、API、行動應用等

🤔 什麼是 JSON?

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,它易於人類閱讀和編寫,同時也易於機器解析和生成。雖然 JSON 源自 JavaScript,但它已成為一種獨立於程式語言的資料格式,幾乎所有現代程式語言都支援 JSON 的解析和生成。

✨ JSON 的核心特性

  • 輕量級:語法簡潔,檔案體積小,傳輸效率高
  • 易讀性:採用鍵值對結構,類似自然語言,便於理解
  • 語言無關:幾乎所有程式語言都支援 JSON
  • 標準化:遵循 RFC 8259 標準,確保一致性
  • 廣泛支援:API、配置文件、資料儲存等場景都使用 JSON

JSON vs XML:為什麼選擇 JSON?

在 JSON 出現之前,XML(Extensible Markup Language)是最常用的資料交換格式。相比 XML,JSON 具有以下優勢:

特性 JSON XML
語法複雜度 ✅ 簡潔 ❌ 冗長
檔案大小 ✅ 較小 ❌ 較大
解析速度 ✅ 快速 ❌ 較慢
資料類型支援 ✅ 原生支援多種類型 ❌ 所有內容都是字串
閱讀性 ✅ 易於閱讀 ⚠️ 標籤較多,略顯複雜
JSON 學習資源與下一步建議的視覺化呈現
JSON 學習資源與下一步建議的視覺化呈現

📐 JSON 語法基礎

JSON 的語法規則非常簡單,主要由兩種結構組成:物件(Object)陣列(Array)

1️⃣ JSON 物件(Object)

JSON 物件使用大括號 {} 包裹,內部是一組鍵值對(Key-Value Pairs),鍵和值之間用冒號 : 分隔,不同的鍵值對之間用逗號 , 分隔。

{
  "name": "張三",
  "age": 28,
  "isStudent": false,
  "email": "[email protected]"
}
⚠️ 重要規則:
  • 鍵(Key)必須是字串,且必須用雙引號包裹(不能用單引號)
  • 值(Value)可以是字串、數字、布林值、物件、陣列或 null
  • 最後一個鍵值對不能有尾隨逗號

2️⃣ JSON 陣列(Array)

JSON 陣列使用方括號 [] 包裹,內部是一組值的有序列表,值之間用逗號 , 分隔。

{
  "students": [
    "張三",
    "李四",
    "王五"
  ],
  "scores": [85, 92, 78, 95],
  "mixedArray": [
    "文字",
    123,
    true,
    null,
    {"key": "value"}
  ]
}

3️⃣ 巢狀結構

JSON 支援任意深度的巢狀結構,物件可以包含陣列,陣列也可以包含物件。

{
  "company": "科技公司",
  "departments": [
    {
      "name": "研發部",
      "employees": [
        {"name": "張三", "role": "工程師"},
        {"name": "李四", "role": "設計師"}
      ]
    },
    {
      "name": "市場部",
      "employees": [
        {"name": "王五", "role": "市場經理"}
      ]
    }
  ]
}

🔢 JSON 資料類型詳解

JSON 支援 7 種資料類型,這些類型涵蓋了大多數資料表示需求。

1. 字串(String)

字串必須用雙引號包裹,支援 Unicode 字符和轉義字符。

{
  "text": "這是一個字串",
  "escaped": "第一行\n第二行",
  "unicode": "中文 \u4E2D\u6587"
}

常見轉義字符:\"(雙引號)、\\(反斜線)、\n(換行)、\t(Tab)、\r(回車)

2. 數字(Number)

JSON 支援整數和浮點數,可以使用科學記號。

{
  "integer": 42,
  "float": 3.14159,
  "negative": -273.15,
  "scientific": 6.022e23
}
💡 提示:JSON 不支援 NaNInfinity-Infinity,這些需要用字串或 null 表示。

3. 布林值(Boolean)

只有兩個值:truefalse(必須小寫)。

{
  "isActive": true,
  "isDeleted": false
}

4. 空值(Null)

表示「無值」或「未定義」,使用 null(必須小寫)。

{
  "middleName": null,
  "previousJob": null
}

5. 物件(Object)

由鍵值對組成的無序集合。

6. 陣列(Array)

值的有序列表。

7. 特殊值

注意:JSON 不支援以下內容:

  • ❌ 函式(Function)
  • ❌ 日期物件(Date)需轉為字串或時間戳
  • ❌ undefined(使用 null 代替)
  • ❌ 註解(Comments)
  • ❌ 單引號字串(必須用雙引號)

⚠️ 常見錯誤與陷阱

初學者在使用 JSON 時經常會犯以下錯誤,了解這些陷阱可以幫助您避免問題。

❌ 錯誤 1:使用單引號

// ❌ 錯誤
{'name': 'John'}

// ✅ 正確
{"name": "John"}

❌ 錯誤 2:鍵沒有引號

// ❌ 錯誤
{name: "John"}

// ✅ 正確
{"name": "John"}

❌ 錯誤 3:尾隨逗號

// ❌ 錯誤
{
  "name": "John",
  "age": 30,  ← 多餘的逗號
}

// ✅ 正確
{
  "name": "John",
  "age": 30
}

❌ 錯誤 4:註解

// ❌ 錯誤(JSON 不支援註解)
{
  // 這是姓名
  "name": "John"
}

// ✅ 正確(移除註解)
{
  "name": "John"
}

❌ 錯誤 5:使用 undefined

// ❌ 錯誤
{"value": undefined}

// ✅ 正確
{"value": null}
💡 調試技巧:使用 JSON 解析器工具 可以快速發現和修正這些錯誤,工具會自動指出錯誤位置並提供修正建議。

🌍 實際應用場景

JSON 在現代軟體開發中無處不在,以下是最常見的應用場景。

1️⃣ API 資料交換

幾乎所有現代 Web API(如 RESTful API、GraphQL)都使用 JSON 作為資料交換格式。

// GET /api/users/123 的回應
{
  "id": 123,
  "username": "john_doe",
  "email": "[email protected]",
  "profile": {
    "firstName": "John",
    "lastName": "Doe",
    "avatar": "https://example.com/avatar.jpg"
  },
  "createdAt": "2024-01-15T10:30:00Z"
}

2️⃣ 配置文件

許多應用程式和工具使用 JSON 作為配置文件格式,如 package.jsontsconfig.json、VS Code 設定等。

// package.json 範例
{
  "name": "my-project",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.0",
    "lodash": "^4.17.21"
  },
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}

3️⃣ 資料儲存

NoSQL 資料庫(如 MongoDB、CouchDB)使用類似 JSON 的格式(BSON)儲存資料。

4️⃣ 前端狀態管理

React、Vue 等前端框架使用 JSON 格式的資料結構管理應用狀態。

5️⃣ 日誌記錄

結構化日誌(Structured Logging)通常使用 JSON 格式,便於機器解析和分析。

{
  "timestamp": "2025-01-27T14:23:45Z",
  "level": "ERROR",
  "message": "Database connection failed",
  "context": {
    "host": "db.example.com",
    "port": 5432,
    "retryCount": 3
  }
}

⭐ 最佳實踐建議

1. 保持一致的命名規則

選擇一種命名風格並在整個專案中保持一致:

  • camelCasefirstNameuserId(JavaScript 常用)
  • snake_casefirst_nameuser_id(Python、Ruby 常用)
  • kebab-casefirst-nameuser-id(不推薦,需用引號)

2. 使用有意義的鍵名

// ❌ 不好
{"n": "John", "a": 30}

// ✅ 好
{"name": "John", "age": 30}

3. 適當使用巢狀結構

避免過度巢狀(超過 3-4 層),這會降低可讀性和維護性。

4. 驗證 JSON 資料

在生產環境中,始終驗證接收到的 JSON 資料:

  • 檢查必要欄位是否存在
  • 驗證資料類型
  • 檢查數值範圍
  • 使用 JSON Schema 定義資料結構

5. 正確處理錯誤

// JavaScript 範例
try {
  const data = JSON.parse(jsonString);
  // 處理資料
} catch (error) {
  console.error('JSON 解析失敗:', error.message);
  // 錯誤處理邏輯
}

6. 注意安全性

  • 不要直接執行從 JSON 解析的程式碼(避免 XSS 攻擊)
  • 驗證資料來源
  • 對敏感資料進行加密
  • 限制 JSON 檔案大小,防止 DoS 攻擊

7. 格式化與壓縮

  • 開發環境:使用格式化(Pretty Print)提高可讀性
  • 生產環境:移除空白和換行,減少傳輸大小

🛠️ 工具與資源推薦

線上工具

  • JSON 解析器 - 我們的免費線上 JSON 格式化、驗證工具,支援錯誤修正和語法高亮
  • JSONLint - JSON 驗證工具
  • JSON Schema Validator - 驗證 JSON 是否符合 Schema

程式庫

  • JavaScript:內建 JSON.parse()JSON.stringify()
  • Pythonjson 模組
  • Java:Jackson、Gson
  • C#:Newtonsoft.Json(Json.NET)

學習資源

IDE 擴充套件

  • VS Code:內建 JSON 支援,推薦安裝 "JSON Tools" 擴充
  • IntelliJ IDEA:內建強大的 JSON 編輯功能
  • Sublime Text:Pretty JSON 套件

🚀 立即開始使用 JSON

現在您已經掌握了 JSON 的基礎知識,可以開始在實際專案中使用了!如果需要格式化、驗證或調試 JSON 資料,歡迎使用我們的免費線上工具。