Categories: Python

Python 讀取、產生 JSON 格式資料教學與範例

介紹如何在 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
}

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago