Tutorial

什麼是 JSON?

深入淺出講解 JSON 定義、語法規範、資料類型,以及在 JavaScript 與 Python 中的實戰操作。

2026-04-015 min read

什麼是 JSON?

JSON 是 JavaScript Object Notation(JavaScript 物件表示法)的縮寫,它是一種輕量級的資料儲存和傳輸格式。JSON 的核心設計理念是讓資料既易於人類閱讀,又便於機器解析,這種雙重特性使其成為現代 Web 開發中最重要的資料交換格式之一。

JSON 最初源於 JavaScript 語言,但它已經發展成為完全獨立於程式語言的資料格式標準。無論是 Python、Java、PHP 還是 Ruby,幾乎所有現代程式語言都原生支援 JSON 的讀取和生成。這種跨平台的相容性使 JSON 成為伺服器與客戶端之間、不同系統之間資料傳輸的首選格式。

JSON 採用純文字格式,這意味著它可以在任何支援文字處理的環境中傳輸和儲存,無需依賴特定的軟體或平台。

JSON 的「輕量級」特性體現在兩個方面:首先,它的語法結構極其簡潔,不包含任何冗餘的標記或格式要求;其次,JSON 檔案通常比同等資料的 XML 檔案小 30%-50%,這在需要頻繁傳輸大量資料的 Web 應用中能顯著降低網路開銷和載入時間。

JSON 的語法規則

JSON 的語法設計遵循嚴格的規則,這些規則確保了資料格式的一致性和可解析性。理解這些基本規則是正確使用 JSON 的基礎。

基本語法結構

  • 鍵值對格式:JSON 資料由名稱/值對組成,每個鍵值對用冒號分隔,如 "name": "John"
  • 雙引號強制要求:所有的鍵名必須用雙引號包裹,這是 JSON 與 JavaScript 物件的重要區別
  • 資料分隔符:多個鍵值對之間用逗號分隔,但最後一個鍵值對後面不能有逗號
  • 物件容器:花括號 {} 用於包裹物件,表示一個無序的鍵值對集合
  • 陣列容器:方括號 [] 用於包裹陣列,表示一個有序的值列表
  • 巢狀結構:物件和陣列可以相互嵌套,形成複雜的資料層次結構

避坑指南:JSON 的常見錯誤

在實際開發中,開發者經常會遇到一些 JSON 格式的常見錯誤。以下是需要特別注意的「陷阱」:

1. JSON 不支援註解

JSON 規範中明確不支援任何形式的註解。如果您在 JSON 檔案中加入 ///* */ 格式的註解,解析器會直接報錯。如果需要在 JSON 中包含說明性資訊,可以考慮在資料中加入特殊的鍵,如 "_comment": "這是說明文字",但這種做法並不推薦用於生產環境。

2. 必須使用雙引號,不能使用單引號

這是一個極其常見的錯誤。在 JavaScript 中,您可以使用單引號或雙引號來定義字串,但在 JSON 中,所有的字串必須使用雙引號。例如,{'name': 'John'} 是無效的 JSON,必須寫成 {"name": "John"}

3. 最後一個元素後不能有逗號

在 JavaScript 中,物件或陣列的最後一個元素後可以有一個可選的逗號,但在 JSON 中這是嚴格禁止的。{"name": "John",} 會導致解析錯誤,正確的格式是 {"name": "John"}

4. 鍵名必須是字串

JSON 中所有的鍵必須是字串類型,並且必須用雙引號包裹。像 {age: 25} 這樣的寫法在 JavaScript 中是合法的,但在 JSON 中無效,必須寫成 {"age": 25}

核心資料型別

JSON 支援六種核心資料型別,每種類型都有其特定的語法規則和用途。理解這些資料型別是正確建構 JSON 資料結構的關鍵。

String(字串)

字串是 JSON 中最常用的資料型別,用於表示文字資訊。字串必須用雙引號包裹,可以包含任何 Unicode 字元。JSON 字串支援常見的跳脫字元,如 \n(換行)、\t(製表符)、\"(雙引號)等。

{
  "name": "張三",
  "email": "zhangsan@example.com",
  "address": "北京市朝陽區\n建國路88號"
}

Number(數字)

JSON 中的數字類型包括整數和浮點數,不支援八進制和十六進制格式。數字可以是正數、負數,也可以包含小數部分或使用科學計數法表示。

{
  "age": 28,
  "price": 99.99,
  "temperature": -5,
  "largeNumber": 3.14e10
}

Object(物件)

物件是無序的鍵值對集合,用花括號包裹。每個鍵值對中的鍵必須是字串,值可以是任何合法的 JSON 資料型別。物件可以嵌套,形成複雜的資料結構。

{
  "user": {
    "profile": {
      "name": "李四",
      "age": 32
    },
    "preferences": {
      "theme": "dark",
      "language": "zh-TW"
    }
  }
}

Array(陣列)

陣列是有序的值列表,用方括號包裹。陣列中的值可以是任何 JSON 資料型別,包括混合類型。陣列特別適合表示集合資料,如使用者列表、標籤等。

{
  "users": ["Alice", "Bob", "Charlie"],
  "scores": [95, 87, 92, 88],
  "mixed": [1, "two", true, null]
}

Boolean(布林值)

布林值只有兩個可能的值:truefalse。注意這些值是小寫的,並且不需要引號包裹。

{
  "isActive": true,
  "hasPermission": false,
  "isPremium": true
}

Null(空值)

null 表示一個空值或不存在的值。它同樣不需要引號包裹,且必須小寫。

{
  "middleName": null,
  "avatar": null,
  "lastLoginTime": null
}

JSON vs XML

JSON 和 XML 都是用於資料儲存和傳輸的格式,但它們在設計理念、語法結構和使用場景上存在顯著差異。以下對比表幫助您快速理解兩者的區別:

特性JSONXML
全稱JavaScript Object NotationeXtensible Markup Language
檔案大小更小,通常比 XML 小 30%-50%較大,需要閉合標籤
可讀性簡潔清晰,易於閱讀結構清晰但較為冗長
解析速度更快,可使用標準函數解析較慢,需要 XML 解析器
資料型別支援多種原生資料型別僅支援文字,需要自行定義型別
陣列支援原生支援陣列不支援陣列概念
註解不支援註解支援註解
命名空間不支援支援命名空間
適用場景Web API、行動應用、設定檔企業級文件、複雜資料結構

選擇建議:對於現代 Web 開發和行動應用,JSON 通常是更好的選擇,因為它更輕量、解析更快、與 JavaScript 的天然相容性更好。XML 則更適合需要複雜文件結構、命名空間支援或嚴格驗證的企業級應用場景。

實戰:如何在 JS/Python 中操作 JSON?

在實際開發中,最常用的 JSON 操作是將 JSON 字串轉換為程式中的物件,以及將物件轉換為 JSON 字串。以下是在 JavaScript 和 Python 中的具體實作方法。

JavaScript 中的 JSON 操作

JavaScript 提供了兩個核心方法來處理 JSON 資料:JSON.parse()JSON.stringify()

1. JSON.parse() - 將 JSON 字串轉換為 JavaScript 物件

// JSON 字串
const jsonString = '{"name": "張三", "age": 28, "city": "北京"}';

// 解析為 JavaScript 物件
const obj = JSON.parse(jsonString);

// 使用解析後的物件
console.log(obj.name);  // 輸出: 張三
console.log(obj.age);   // 輸出: 28

// 處理巢狀結構
const complexJson = `{
  "user": {
    "profile": {"name": "李四"},
    "skills": ["JavaScript", "Python"]
  }
}`;
const data = JSON.parse(complexJson);
console.log(data.user.profile.name);      // 輸出: 李四
console.log(data.user.skills[0]);          // 輸出: JavaScript

2. JSON.stringify() - 將 JavaScript 物件轉換為 JSON 字串

// JavaScript 物件
const user = {
  name: "王五",
  age: 32,
  email: "wangwu@example.com",
  isActive: true
};

// 轉換為 JSON 字串
const jsonString = JSON.stringify(user);
console.log(jsonString);
// 輸出: {"name":"王五","age":32,"email":"wangwu@example.com","isActive":true}

// 格式化輸出(帶縮排)
const prettyJson = JSON.stringify(user, null, 2);
console.log(prettyJson);
/* 輸出:
{
  "name": "王五",
  "age": 32,
  "email": "wangwu@example.com",
  "isActive": true
}
*/

// 只包含特定屬性
const filtered = JSON.stringify(user, ["name", "email"], 2);
console.log(filtered);
/* 輸出:
{
  "name": "王五",
  "email": "wangwu@example.com"
}
*/

Python 中的 JSON 操作

Python 內建了 json 模組,提供了與 JavaScript 類似的功能。

1. json.loads() - 將 JSON 字串轉換為 Python 物件

import json

# JSON 字串
json_string = '{"name": "張三", "age": 28, "city": "北京"}'

# 解析為 Python 字典
data = json.loads(json_string)

# 使用解析後的資料
print(data['name'])  # 輸出: 張三
print(data['age'])   # 輸出: 28

# 處理巢狀結構
complex_json = '''
{
  "user": {
    "profile": {"name": "李四"},
    "skills": ["JavaScript", "Python"]
  }
}
'''
data = json.loads(complex_json)
print(data['user']['profile']['name'])      # 輸出: 李四
print(data['user']['skills'][0])            # 輸出: JavaScript

2. json.dumps() - 將 Python 物件轉換為 JSON 字串

import json

# Python 字典
user = {
    "name": "王五",
    "age": 32,
    "email": "wangwu@example.com",
    "is_active": True,
    "skills": ["Python", "JavaScript", "Go"]
}

# 轉換為 JSON 字串
json_string = json.dumps(user)
print(json_string)
# 輸出: {"name": "王五", "age": 32, "email": "wangwu@example.com", ...}

# 格式化輸出(帶縮排)
pretty_json = json.dumps(user, indent=2, ensure_ascii=False)
print(pretty_json)
""" 輸出:
{
  "name": "王五",
  "age": 32,
  "email": "wangwu@example.com",
  "is_active": true,
  "skills": [
    "Python",
    "JavaScript",
    "Go"
  ]
}
"""

# 按鍵排序
sorted_json = json.dumps(user, sort_keys=True, indent=2)
print(sorted_json)

JSON 在現代開發中的重要性

根據 Oracle 和 DigitalOcean 的分析,JSON 在現代軟體開發中扮演著不可替代的角色:

API 通訊:幾乎所有的現代 RESTful API 都使用 JSON 作為資料交換格式,因為它輕量、易解析,並且與 JavaScript 天然相容。

資料庫儲存:NoSQL 資料庫(如 MongoDB、Couchbase)原生支援 JSON 格式儲存,主流的關聯式資料庫(如 Oracle、PostgreSQL、MySQL)也開始提供 JSON 資料型別支援,使開發者能夠在關聯式資料庫中靈活地儲存和查詢 JSON 資料。

設定檔:越來越多的應用程式和開發工具採用 JSON 作為設定檔格式,包括 package.json(Node.js)、tsconfig.json(TypeScript)、.vscode/settings.json(VS Code)等,這是因為 JSON 的簡潔性和可讀性優於傳統的 INI 或 XML 格式。


繼續使用 JSON 工具

JSON Work 團隊

致力於為開發者提供最佳的 JSON 處理工具

相關文章

更多文章即將發布...

返回部落格

相關工具推薦

常見問題

關於跟進更新、選題與互動方式。

如何第一時間看到新文章?

收藏本部落格列表頁,並在首頁與工具聚合頁留意指南入口。閱讀文章無需註冊或訂閱電子報。

部落格主要寫什麼?

圍繞 JSON 驗證、格式化、轉換與除錯流程,以及 JSON Work 工具更新,與站內工具的本地能力互相呼應。

可以建議教學主題嗎?

可以。請透過關於頁的聯絡方式或 GitHub 回饋;我們會優先安排貼近真實開發情境的教學。

需要幫助?