1. 什麼是 JSON?
JSON 概述
JSON(JavaScript Object Notation)是一種輕量且高效的資料交換格式,主要用於 Web 應用程式與伺服器之間的數據傳輸。雖然 JSON 基於 JavaScript 語法,但幾乎所有程式語言都支援它。特別是在透過 API 進行資料請求與傳輸時,JSON 扮演著極為重要的角色。
JSON 的結構
JSON 由「鍵值對」組成,並使用大括號 {}
包圍數據。例如,請參考以下的 JSON 結構:
{
"name": "John",
"age": 30,
"isStudent": false,
"courses": ["Math", "Physics", "Chemistry"]
}
這種結構可以包含列表(陣列)或巢狀(嵌套)物件,非常靈活且容易使用。
2. Python 讀取 JSON 檔案的基本方法
Python 的 json
模組介紹
在 Python 中,我們可以使用標準模組 json
來輕鬆處理 JSON 檔案。這個模組內建於 Python,不需要額外安裝,並且提供了許多處理 JSON 讀取與寫入的基本功能。
如何讀取 JSON 檔案
使用 json.load()
函數可以從檔案中讀取 JSON 數據,並將其轉換為 Python 字典。以下是一個簡單的範例:
import json
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data)
3. 如何在 Python 中讀取 JSON 字串
使用 json.loads()
函數
當我們需要將 JSON 字串轉換為 Python 字典時,可以使用 json.loads()
函數。這個函數在處理 API 回應(如 REST API)時非常實用。
import json
json_string = '{"name": "Alice", "age": 25, "city": "Tokyo"}'
data = json.loads(json_string)
print(data)
這樣,我們就可以輕鬆地將 JSON 字串轉換為 Python 字典。
4. 讀取 JSON 檔案時的注意事項與錯誤處理
常見錯誤與解決方案
在讀取 JSON 檔案時,最常見的錯誤之一是 JSONDecodeError。當 JSON 檔案格式不正確時,這個錯誤就會發生。因此,處理錯誤時,應該提供適當的錯誤處理機制,以確認問題所在。
import json
try:
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
except json.JSONDecodeError as e:
print(f"JSON 讀取錯誤: {e}")
編碼(Encoding)問題
如果 JSON 檔案包含中文或其他非 ASCII 字元,則需要特別注意編碼問題。使用 encoding='utf-8'
可以避免文字顯示錯誤。
5. 處理大型 JSON 資料的高效方法
考慮記憶體效率的資料處理
如果一次性將大型 JSON 檔案載入到記憶體,可能會導致記憶體不足的問題。為了避免這種情況,建議使用 ijson
等串流(streaming)解析庫來逐步處理 JSON 數據。
import ijson
with open('large_file.json', 'r', encoding='utf-8') as f:
for item in ijson.items(f, 'item'):
print(item)
透過 ijson
,我們可以高效地處理大型 JSON 檔案,而不會一次性佔用過多記憶體。
6. JSON 轉換為 Python 字典後的應用
基本的字典操作
將 JSON 轉換為字典後,我們可以很容易地對數據進行操作。例如,可以存取特定鍵的值、更新數據,甚至新增鍵值對。
# 操作字典數據
print(data['name']) # 顯示 'Alice'
data['age'] = 26 # 更新年齡
data['email'] = 'alice@example.com' # 新增電子郵件欄位
7. 在 Python 中寫入 JSON 檔案
如何將數據寫入 JSON 檔案
當我們修改或處理過 Python 字典後,通常需要將更新後的數據寫回 JSON 檔案。這時可以使用 json.dump()
函數。
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4, ensure_ascii=False)
其中,indent=4
讓 JSON 變得更具可讀性,ensure_ascii=False
確保 JSON 檔案可以正確存儲中文等非 ASCII 字元。