Python JSON 解析:序列化與反序列化
了解如何在 Python 中讀取、寫入和解析 JSON 資料。掌握 son.loads、json.dumps 和自訂 JSON 編碼器/解碼器。
概述
JSON(JavaScript 物件表示法)是一種輕量級資料交換格式,主導著現代 Web API、配置和資料庫負載。由於 JSON 結構類似於 Python 字典和列表,因此它們之間的轉換非常無縫。 Python 配備了內建的「json」模組,可以輕鬆地將 JSON 字串解析為 Python 對象,並將 Python 物件轉換回 JSON 字串。
將 Python 物件(如字典)轉換為原始 JSON 字串的過程稱為序列化或編碼。這是由 `json.dumps()` (對於字串)和 `json.dump()` (對於直接寫入檔案)處理的。您可以控制格式參數,例如「indent」來美化 JSON,或「sort_keys」來保持屬性按字母順序排序。相反,將 JSON 字串解析為 Python 字典稱為反序列化,透過 json.loads() 和 json.load() 執行。
雖然字串、數字、列表和字典等標準 Python 類型會自動序列化為 JSON,但自訂物件(如類別或日期時間物件)卻不會。嘗試直接編碼自訂物件將引發“TypeError”。為了克服這個問題,開發人員必須建立一個繼承自「json.JSONEncoder」的自訂編碼器類,並重寫「.default()」方法以將類別序列化為可讀的字典。掌握 JSON 操作是與外部 Web 服務通訊的關鍵。
程式碼和執行輸出
將字典轉換為 JSON 字串並使用內建 json 庫將其解析回來。
import json
# Python Dictionary representing a user profile
user_profile = {
"name": "Alex",
"is_premium": True,
"skills": ["Python", "Docker"],
"age": 28
}
# Serialize dictionary to JSON string
json_string = json.dumps(user_profile, indent=2)
print("--- JSON String ---")
print(json_string)
# Deserialize JSON string back to dictionary
parsed_dict = json.loads(json_string)
print("\n--- Parsed Python Dictionary ---")
print(f"Name: {parsed_dict['name']}")
print(f"First Skill: {parsed_dict['skills'][0]}")--- JSON String ---
{
"name": "Alex",
"is_premium": true,
"skills": [
"Python",
"Docker"
],
"age": 28
}
--- Parsed Python Dictionary ---
Name: Alex
First Skill: Python逐步實施
- 發送有效負載並從 REST API 讀取數據
- 將配置首選項儲存在 settings.json 檔案中
- 在微服務之間傳遞結構化負載
常見問題解答
json.dump 和 json.dumps 有什麼不同?
json.dump(不含「s」)將 JSON 資料直接寫入檔案流。 json.dumps(帶有“s”)將資料序列化為 Python 字串變數。
如何處理 JSON 解碼錯誤?
將解析程式碼包裝在捕獲“json.JSONDecodeError”的 try/ except 區塊中,以優雅地處理格式錯誤的 JSON 字串。
相關主題
推薦的 Python 資源
透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。