JSON 格式解析:{} 與 [] 的使用時機與 Python 實戰

更新 發佈閱讀 10 分鐘

引言

JSON(JavaScript Object Notation)已成為現代網路上資料交換的標準格式之一,無論你是前端開發者、後端工程師,還是資料科學家,都一定會遇到它。JSON 的簡潔性和易讀性讓它比 XML 更受歡迎,但對於初學者來說,何時使用方括號 [] 和何時使用花括號 {} 常常讓人困惑。本文將深入解析 JSON 格式,並教你如何在 Python 中輕鬆轉換 JSON 資料。

什麼是 JSON?

JSON 是一種輕量級的資料交換格式,具有以下特點:

  • 基於純文字,易於閱讀和編寫
  • 與程式語言無關,幾乎所有現代語言都支援
  • 結構化資料表示,支援巢狀結構

JSON 的基本結構只有兩種:

  1. 物件(Object):使用 {} 表示
  2. 陣列(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 的對應關係

raw-image

五、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 用法如下
    raw-image
    • indent 是控制 JSON 排版縮排格式 的參數。
    raw-image

    總結

    JSON 格式的選擇取決於你的資料結構:
    • 使用 {} 當你需要鍵值對結構,表示物件或屬性集合
    • 使用 [] 當你需要有序列表,表示相同類型的項目集合
    在 Python 中,使用 json 模組可以輕鬆地在 JSON 和 Python 物件之間轉換:
    • json.dumps() 將 Python 物件轉為 JSON 字串
    • json.loads() 將 JSON 字串轉為 Python 物件
    • 記得使用 ensure_ascii=False 來正確處理中文
    掌握 JSON 格式的正確使用時機,並熟練運用 Python 的 JSON 處理功能,將使你在資料處理、API 開發和系統整合等方面更加得心應手。現在就去嘗試處理一些 JSON 資料,實踐這些技巧吧!
留言
avatar-img
慵懶貓系的小墨魚:數據外的日常觀察
3會員
45內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
2026/01/31
本文深入解析 CI/CD 的核心概念(持續整合與持續部署),並介紹 GitHub Actions 如何作為一個強大的自動化平臺,協助開發團隊提升效率與可靠性。從基礎的 YAML 設定檔到進階的矩陣測試與 secrets 管理,提供實用的技巧與最佳實踐,引導開發者踏上自動化之旅。
Thumbnail
2026/01/31
本文深入解析 CI/CD 的核心概念(持續整合與持續部署),並介紹 GitHub Actions 如何作為一個強大的自動化平臺,協助開發團隊提升效率與可靠性。從基礎的 YAML 設定檔到進階的矩陣測試與 secrets 管理,提供實用的技巧與最佳實踐,引導開發者踏上自動化之旅。
Thumbnail
2025/12/02
無論是統計學習新手,還是資深資料分析師,都需要實戰資料來精進技能。本文整理了 Kaggle、UCI、Data.gov、各國資料開放平臺,以及生物醫學、深度學習等領域的公開資料庫。依據不同用途(綜合競賽、政府事務、專業領域)進行分類介紹,並提供實用的數據搜尋、清理與分析技巧,助您成為數據處理的佼佼者。
Thumbnail
2025/12/02
無論是統計學習新手,還是資深資料分析師,都需要實戰資料來精進技能。本文整理了 Kaggle、UCI、Data.gov、各國資料開放平臺,以及生物醫學、深度學習等領域的公開資料庫。依據不同用途(綜合競賽、政府事務、專業領域)進行分類介紹,並提供實用的數據搜尋、清理與分析技巧,助您成為數據處理的佼佼者。
Thumbnail
2025/11/13
本文將介紹如何利用 Linux 的 systemd 服務管理器,為 AWS EC2 上的 Jupyter Lab 建立可靠的系統服務。透過簡單三大步驟,您可以解決 SSH 連線中斷導致 Jupyter Lab 無法使用的問題,使其能夠在伺服器重啟後自動運行,實現 24 小時不間斷的遠端程式開發環境。
Thumbnail
2025/11/13
本文將介紹如何利用 Linux 的 systemd 服務管理器,為 AWS EC2 上的 Jupyter Lab 建立可靠的系統服務。透過簡單三大步驟,您可以解決 SSH 連線中斷導致 Jupyter Lab 無法使用的問題,使其能夠在伺服器重啟後自動運行,實現 24 小時不間斷的遠端程式開發環境。
Thumbnail
看更多
你可能也想看
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
本文介紹了Python如何使用websockets進行雙向溝通,包括文字、json、xml和音訊的傳遞。特別著重於json資料交換格式,以及websockets通道的基本流程和關鍵的編碼與解碼。最終談到WebSocket對於傳統同步程式的轉變及對asyncio等套件的重要性。
Thumbnail
本文介紹了Python如何使用websockets進行雙向溝通,包括文字、json、xml和音訊的傳遞。特別著重於json資料交換格式,以及websockets通道的基本流程和關鍵的編碼與解碼。最終談到WebSocket對於傳統同步程式的轉變及對asyncio等套件的重要性。
Thumbnail
關於json的資料交換格式請參考「【程式語言 - Javascript】輕量資料格式 JSON」, 我們常常會在使用套件的過程中發現回傳值的型態都會有「dict」的蹤跡, 為什麼呢? 因為動態、彈性、靈活, 不需要預先定義類別來明確指定每個欄位的內容, 但缺點就是文件必須寫清楚內容物是哪些, 否
Thumbnail
關於json的資料交換格式請參考「【程式語言 - Javascript】輕量資料格式 JSON」, 我們常常會在使用套件的過程中發現回傳值的型態都會有「dict」的蹤跡, 為什麼呢? 因為動態、彈性、靈活, 不需要預先定義類別來明確指定每個欄位的內容, 但缺點就是文件必須寫清楚內容物是哪些, 否
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News