引言
JSON(JavaScript Object Notation)已成為現代網路上資料交換的標準格式之一,無論你是前端開發者、後端工程師,還是資料科學家,都一定會遇到它。JSON 的簡潔性和易讀性讓它比 XML 更受歡迎,但對於初學者來說,何時使用方括號 [] 和何時使用花括號 {} 常常讓人困惑。本文將深入解析 JSON 格式,並教你如何在 Python 中輕鬆轉換 JSON 資料。
什麼是 JSON?
JSON 是一種輕量級的資料交換格式,具有以下特點:
- 基於純文字,易於閱讀和編寫
- 與程式語言無關,幾乎所有現代語言都支援
- 結構化資料表示,支援巢狀結構
- 物件(Object):使用
{}表示 - 陣列(Array):使用
[]表示
一、何時使用 {}(物件/字典)
1.1物件的基本結構
{
"key1": "value1",
"key2": "value2",
"key3": 123
}
1.2使用時機
- 表示具有屬性的實體
{
"name": "張小明",
"age": 25,
"email": "xiaoming@example.com"
}
- 鍵值對集合
{
"users": 150,
"active": true,
"last_login": "2023-10-15T08:30:00Z"
}
- 配置檔案
{
"database": {
"host": "localhost",
"port": 5432,
"username": "admin"
},
"settings": {
"theme": "dark",
"language": "zh-TW"
}
}
- API 請求/回應
{
"status": "success",
"data": {
"id": 12345,
"type": "user"
}
}
二、何時使用 [](陣列/列表)
2.1陣列的基本結構
["value1", "value2", "value3"]
2.2使用時機
- 相同類型的項目集合
["apple", "banana", "orange", "grape"]
- 數字列表
[1, 2, 3, 4, 5]
- 物件陣列
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"},
{"id": 3, "name": "Charlie"}
]
- 多維陣列
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
三、{} 和 [] 的組合使用
真實世界的 JSON 資料通常是兩者的組合:
{
"company": "TechCorp",
"employees": [
{
"id": 1,
"name": "王大明",
"skills": ["Python", "JavaScript", "SQL"]
},
{
"id": 2,
"name": "李小美",
"skills": ["Java", "Docker", "Kubernetes"]
}
],
"departments": [
{
"name": "Engineering",
"manager": "王大明"
},
{
"name": "Marketing",
"manager": "李小美"
}
]
}
四、JSON 與 Python 的對應關係

五、Python 中的 JSON 轉換
5.1將 Python 物件轉換為 JSON(序列化)
#導入 JSON 模組
import json
# Python 字典轉 JSON 字串
python_dict = {
"name": "張小明",
"age": 25,
"hobbies": ["閱讀", "游泳", "攝影"],
"is_student": True
}
json_string = json.dumps(python_dict, ensure_ascii=False, indent=2)
print(json_string)
# 輸出:
# {
# "name": "張小明",
# "age": 25,
# "hobbies": ["閱讀", "游泳", "攝影"],
# "is_student": true
# }
# 將 JSON 寫入檔案
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(python_dict, f, ensure_ascii=False, indent=2)
5.2將 JSON 轉換為 Python 物件(反序列化)
#導入 JSON 模組
import json
# JSON 字串轉 Python 字典
json_data = '{"name": "張小明", "age": 25, "city": "台北"}'
python_obj = json.loads(json_data)
print(python_obj["name"]) # 輸出:張小明
print(type(python_obj)) # 輸出:<class 'dict'>
# 從檔案讀取 JSON
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data)
5.3處理複雜的 JSON 結構
# 複雜的 JSON 資料
complex_json = '''
{
"company": "TechCorp",
"employees": [
{"id": 1, "name": "王大明", "skills": ["Python", "JavaScript"]},
{"id": 2, "name": "李小美", "skills": ["Java", "Docker"]}
],
"stats": {
"total_employees": 2,
"average_age": 28.5
}
}
'''
# 轉換為 Python 物件
data = json.loads(complex_json)
# 存取資料
print(f"公司名稱: {data['company']}")
print(f"員工數量: {data['stats']['total_employees']}")
print("第一位員工的技能:", data['employees'][0]['skills'])
# 修改資料
data['employees'].append({
"id": 3,
"name": "陳小華",
"skills": ["Go", "Kubernetes"]
})
# 轉回 JSON
updated_json = json.dumps(data, ensure_ascii=False, indent=2)
print(updated_json)
六、實用技巧與常見問題
6.1處理中文編碼
# 正確處理中文
json.dumps(data, ensure_ascii=False, indent=2)
- ensure_ascii 用法如下

- indent 是控制 JSON 排版縮排格式 的參數。

總結
JSON 格式的選擇取決於你的資料結構:- 使用
{}當你需要鍵值對結構,表示物件或屬性集合 - 使用
[]當你需要有序列表,表示相同類型的項目集合
json模組可以輕鬆地在 JSON 和 Python 物件之間轉換:json.dumps()將 Python 物件轉為 JSON 字串json.loads()將 JSON 字串轉為 Python 物件- 記得使用
ensure_ascii=False來正確處理中文
















