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 資源

透過相關的互動式教學、備忘單和程式碼比較來擴展您的知識。