剛開始學習 Python 的初學者可能會混淆 JSON 格式和 Python 字典。這兩種格式都使用 {} 花括號,並以 key:value 結構來表示數據,但實際上在用途和語法上存在差異。在這篇文章中,我們將說明 JSON 和字典的 共通點差異,以及如何在 Python 中進行 JSON 和字典之間的轉換


1. JSON 與 Python 字典的共通點

JSON 和 Python 字典都以 鍵-值對 的形式來表示數據,這是它們的共通點。正因為這種相似性,所以初學者經常會有相同的感受。

主要共通點

  • 鍵-值結構: 這兩種格式都以 {key: value} 形式來儲存數據。
  • 支持嵌套結構: 可以在內部嵌套列表、其他對象等來表示數據。

示例

JSON 格式:

{
    "name": "Alice",
    "age": 25,
    "skills": ["Python", "Django"]
}

Python 字典:

person = {
    "name": "Alice",
    "age": 25,
    "skills": ["Python", "Django"]
}

2. JSON 與 Python 字典的差異

雖然 JSON 和字典在表面上看起來相似,但在語法和使用目的上卻存在差異。

2.1 使用目的的差異

  • JSON: 一種用於數據交換的 語言獨立的標準格式。它被用於 Python、JavaScript、Java、C++ 等多種語言之間的數據交換。
  • Python 字典: 用於在 Python 內部存儲和操作數據的 Python 專用數據結構

2.2 語法上的差異

JSON 與 Python 字典在語法上有以下幾個差異:

特徵 JSON Python 字典
字串表示 字串必須以 " 表示 字串可以使用 '" 皆可
鍵的類型 鍵必須是字串 鍵可以是字串、數字等多種類型
值的類型 有限制 (字串、數字、陣列等) 無限制 (可以包含函數、物件等)
布林值 true, false True, False
空值 null None
註解 不支持註解 可以使用註解

示例分析差異

JSON:

{
    "name": "Alice",
    "age": 25,
    "isActive": true,
    "nickname": null
}

Python 字典:

person = {
    "name": "Alice",
    "age": 25,
    "isActive": True,  # 可註解
    "nickname": None
}

從以上例子看:

  • 在 JSON 中,truefalsenull 是小寫,但在 Python 中,TrueFalseNone 的首字母則是大寫。

3. Python 字典與 JSON 之間的轉換

在 Python 中,可以使用 json 模組 簡單地進行 JSON 與字典之間的轉換。

3.1 字典 → JSON 轉換

使用 json.dumps() 將 Python 字典轉換為 JSON 字串。

import json

person = {
    "name": "Alice",
    "age": 25,
    "isActive": True,
    "nickname": None
}

json_data = json.dumps(person)
print(json_data)

輸出:

{"name": "Alice", "age": 25, "isActive": true, "nickname": null}

3.2 JSON → 字典轉換

使用 json.loads() 可以將 JSON 字串轉換為 Python 字典。

import json

json_data = '{"name": "Alice", "age": 25, "isActive": true, "nickname": null}'
person = json.loads(json_data)
print(person)

輸出:

{'name': 'Alice', 'age': 25, 'isActive': True, 'nickname': None}

3.3 JSON 數據文件的保存與讀取

將 JSON 數據保存到文件
import json

data = {"name": "Alice", "age": 25, "isActive": True}

with open("data.json", "w") as file:
    json.dump(data, file, indent=4)  # 使用 indent 選項
使用 indent 選項的結果:
  • 無 indent 保存:
    {"name": "Alice","age":25,"isActive":true}
  • 使用 indent=4 保存:
    {
        "name": "Alice",
        "age": 25,
        "isActive": true
    }
讀取 JSON 文件
import json

with open("data.json", "r") as file:
    data = json.load(file)
    print(data)

輸出:

{'name': 'Alice', 'age': 25, 'isActive': True}

JSON 與 Python 字典之間的轉換過程

結論

JSON 和 Python 字典擁有相似的結構,但在 用途語法 上存在差異。JSON 是用於數據交換的標準格式,而 Python 字典則適合在 Python 代碼內部操作數據。使用 Python 的 json 模塊可以輕鬆實現 JSON 和字典之間的轉換,根據需要靈活使用!

額外提示

  • 在保存 JSON 文件時使用 indent 選項可以生成便於人類閱讀的文件。處理數據文件時可讀性很重要,請務必加以利用。
  • 在進行 JSON 和字典之間的轉換時,務必注意布林值與 null/None 的差異。