介紹如何在 Python 中使用內建的 json 模組,讀取、解析、產生與寫入 JSON 格式資料。
讀取 JSON 檔案
假設我們有一個 JSON 檔案 data.json,其內容如下:
{
"name": "Jason",
"age": 21,
"skill": ["Python", "C/C++"],
"married": false
}
如果要在 Python 中讀取 data.json 這個 JSON 檔案,可以使用 Python 內建 json 模組中的 load() 函數:
import json # 開啟 JSON 檔案 with open("data.json") as f: # 讀取 JSON 檔案 p = json.load(f) # 查看整個 JSON 資料解析後的結果 print("p =", p) # 取得 name 的值 print("name =", p["name"]) # 取得 skill 的值 print("skill =", p["skill"])
p = {'name': 'Jason', 'age': 21, 'skill': ['Python', 'C/C++'], 'married': False}
name = Jason
skill = ['Python', 'C/C++']
load() 函數預設會使用 json.JSONDecoder() 依照以下的對應方式將 JSON 資料轉為 Python 內部的資料格式:
| 原始 JSON 類型 | 轉為 Python 的類型 |
|---|---|
| object | dict |
| array | list |
| string | str |
| number (int) | int |
| number (real) | float |
| true | True |
| false | False |
| null | None |
解析 JSON 字串資料
如果在 Python 中要直接解析字串中的 JSON 資料,可以使用 json 模組的 loads() 函數:
import json # JSON 字串資料 jsonStr = '{"name": "Jason", "age": 21, "skill": ["Python", "C/C++"], "married": false}' # 解析 JSON 字串資料 p = json.loads(jsonStr) # 查看整個 JSON 資料解析後的結果 print("p =", p) # 取得 name 的值 print("name =", p["name"]) # 取得 skill 的值 print("skill =", p["skill"])
p = {'name': 'Jason', 'age': 21, 'skill': ['Python', 'C/C++'], 'married': False}
name = Jason
skill = ['Python', 'C/C++']
loads() 函數的效果跟 load() 函數相同,只不過 loads 的資料來源是字串,而 load() 是從檔案讀取資料。
寫入 JSON 檔案
若要將 Python 中的各種資料轉為 JSON 格式並儲存至 JSON 檔案中,可以使用 dump() 函數:
import json # Python 的 dict 類型資料 myDict = { "name": "Jason", "age": 21, "skill": ["Python", "C/C++"], "married": False } # 將 Python 資料轉為 JSON 格式,儲存至 output.json 檔案 with open("output.json", "w") as f: json.dump(myDict, f, indent = 4)
這裡產生的 output.json 檔案內容為:
{
"name": "Jason",
"age": 21,
"skill": [
"Python",
"C/C++"
],
"married": false
}
dump() 函數預設會使用 json.JSONEncoder() 依照以下的對應方式將 Python 內部的資料轉為 JSON 格式的資料:
| 原始 Python 類型 | 轉為 JSON 的類型 |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float, int- & float-derived Enums | number |
| True | true |
| False | false |
| None | null |
轉為 JSON 字串資料
若要將 Python 中的各種資料轉為 JSON 格式的字串,可以改用 dumps() 函數:
import json # Python 的 dict 類型資料 myDict = { "name": "Jason", "age": 21, "skill": ["Python", "C/C++"], "married": False } # 將 Python 資料轉為 JSON 格式的字串 print(json.dumps(myDict))
{"name": "Jason", "age": 21, "skill": ["Python", "C/C++"], "married": false}
若需要加上排版以方便閱讀,可以使用 indent 參數指定縮排長度:
# 加入排版 print(json.dumps(myDict, indent = 4))
{
"name": "Jason",
"age": 21,
"skill": [
"Python",
"C/C++"
],
"married": false
}

