1. JSON是什麼?(基礎知識)
JSON的概述
JSON(JavaScript Object Notation)是一種常用於客戶端與伺服器之間通訊的數據格式。它輕量且易於閱讀,結構簡單,因此被廣泛應用於Web應用程式和行動應用程式。由於JSON是純文字格式,因此可以在任何程式語言中輕鬆處理,具備極高的通用性。
JSON的基本結構
JSON使用「鍵值對」的方式來表示數據。例如,以下是JSON的基本結構:
{
"名稱": "佐藤",
"年齡": 30,
"興趣": ["閱讀", "電影"]
}
在此範例中,名稱
是字串,年齡
是數字,興趣
是陣列。由於結構簡單且可讀性高,使得數據傳輸變得非常高效。
JSON的優勢
- 輕量且高效:由於是純文字格式,因此佔用的網路流量較少,減輕了網路負擔。
- 高度相容:幾乎所有的程式語言都支援JSON,因此可跨多個平台使用。
- 解析簡單:易於讀取和寫入,特別適用於API通訊。
2. Python中的JSON操作(基礎篇)
Python的json
模組
在Python中,可以使用json
模組來輕鬆讀取和寫入JSON數據。例如,將JSON字串轉換為Python的字典(dict)可以使用json.loads()
函式:
import json
json_data = '{"名稱": "佐藤", "年齡": 30}'
python_obj = json.loads(json_data)
print(python_obj) # {'名稱': '佐藤', '年齡': 30}
相反地,如果要將Python的物件轉換為JSON格式,可以使用json.dumps()
:
python_obj = {"名稱": "佐藤", "年齡": 30}
json_data = json.dumps(python_obj, ensure_ascii=False)
print(json_data) # {"名稱": "佐藤", "年齡": 30}
讀取與寫入JSON檔案
還可以從JSON檔案中讀取數據,或是將數據寫入JSON檔案:
# 從檔案讀取
with open('data.json', 'r') as f:
data = json.load(f)
# 寫入檔案
with open('data.json', 'w') as f:
json.dump(python_obj, f, ensure_ascii=False)
3. Python中的JSON通訊(實踐篇)
使用requests
模組進行API通訊
透過requests
模組,可以輕鬆地透過API發送與接收JSON數據。以下範例展示如何使用POST請求發送JSON數據並接收回應。
使用POST請求發送JSON數據
import requests
url = 'https://example.com/api'
data = {'名稱': '佐藤', '年齡': 30}
response = requests.post(url, json=data)
json_response = response.json()
print(json_response)
使用GET請求接收JSON數據
使用GET請求也可以輕鬆從API獲取JSON數據。
response = requests.get('https://example.com/api/user/1')
data = response.json()
print(data)

4. 錯誤處理與最佳實踐
API通訊中的錯誤處理
在API通訊過程中,若發生錯誤,正確處理錯誤回應非常重要。以下範例展示如何捕獲網路錯誤、超時錯誤等異常情況。
try:
response = requests.post(url, json=data)
response.raise_for_status()
except requests.exceptions.HTTPError as errh:
print("HTTP 錯誤:", errh)
except requests.exceptions.ConnectionError as errc:
print("連線錯誤:", errc)
except requests.exceptions.Timeout as errt:
print("超時錯誤:", errt)
except requests.exceptions.RequestException as err:
print("其他錯誤:", err)
重試機制
在網路不穩定的情況下,實作重試機制有助於提高請求的成功率。使用requests
模組時,可以透過Retry
類來實作重試邏輯。
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
response = session.get(url)
5. JSON驗證
使用jsonschema
進行驗證
為了確保從API接收的JSON數據符合預期格式,可以使用jsonschema
庫來進行數據驗證。
from jsonschema import validate, ValidationError
schema = {
"type": "object",
"properties": {
"名稱": {"type": "string"},
"年齡": {"type": "number"}
},
"required": ["名稱", "年齡"]
}
json_data = {"名稱": "佐藤", "年齡": 30}
try:
validate(instance=json_data, schema=schema)
print("JSON 格式有效")
except ValidationError as e:
print("驗證錯誤:", e)
此方法也適用於更複雜的數據結構,包括嵌套的物件,確保API返回的數據符合預期。
6. JSON安全性最佳實踐
API密鑰的管理
API密鑰不應該直接硬編碼在程式碼內,應該透過環境變數來管理,以降低安全風險。
import os
api_key = os.getenv('API_KEY')
數據清理與安全處理
在將用戶輸入的數據發送至伺服器之前,應適當清理數據,以防止SQL注入和跨網站腳本攻擊(XSS)。
from html import escape
safe_data = escape(user_input)
避免JSON反序列化攻擊
在處理不受信任的JSON數據時,應該避免直接使用eval()
來解析數據,而應使用官方提供的json.loads()
方法來解析JSON,以防止代碼執行漏洞。
import json
unsafe_json = '{"名稱": "佐藤", "年齡": 30}'
data = json.loads(unsafe_json) # 安全解析
7. 總結
在本指南中,我們學習了如何使用Python進行JSON操作與API通訊,包括基本的JSON讀寫、錯誤處理、數據驗證以及安全性考量。掌握這些技巧後,無論是在開發Web應用程式還是資料處理,JSON都將成為一個強大的工具。
透過遵循最佳實踐,例如適當的錯誤處理、數據驗證和安全性措施,可以確保您的應用程式更可靠、更安全。希望本指南對您有所幫助!