Last Updated on 2021-05-12 by Clay
Json 格式的文件資料非常方便處理,也因為各種不同的程式語言都可支援這樣的資料讀寫格式,所以相當適合不同程式語言之間共同存取某份特定的資料、進行協同開發。
今天主要介紹該怎麼透過 Python 內建的 "json" 套件處理以及讀寫 Json 格式的文件。
Json (JavaScript Object Notation) ,是一種 JavaScript 物件的表示格式, 為相當輕量級的資料交換語言。若是想要看到整齊乾淨的 Json 格式,也可以將 Json 文件放到以下網頁瀏覽: https://jsoneditoronline.org/
如果想要瀏覽 Python 的基本教學,也許你可以參考我之前寫過的《Python 基本教學(一) 下載安裝,然後 Hello World !》
總之,透過 Json 格式的文件存取,可以省去我們不少資料前處理的麻煩,是相當好用、方便的套件。
以下進行章節流程的說明: "dumps()"、"loads()" 主要是直接在程式中處理 Json 格式;而函式名稱十分相似的 "dump()"、"load()" 則是進行 Json 文件的讀寫。
dumps
Python 當中自帶 json 套件,所以我們不必另外安裝,可以直接在程式碼中匯入這個模組。
import json
接著我們來看段簡單的範例:
data = {'today': 9, 'is': 7, 'nice': 8, 'day': 6} output = json.dumps(data) print(output)
Output:
{"today": 9, "is": 7, "nice": 8, "day": 6}
我們的資料為 dict 的資料型態,一個 Key 對應一個 Value。然後我們使用 json.dumps() 的指令將其轉換成 Json 格式。我們可以看到最後的輸出與我們原先的 data 並沒有什麼太大的區別,唯一要注意的是本來 Python 當中字串可以使用 『單引號』來表示,轉到 Json 格式之後一律得使用 『雙引號』來表示。
另外,Json 格式也可以進行排序:
data = {'b': 10, 'a': 100} output = json.dumps(data, sort_keys=True) print(output)
Output:
{"a": 100, "b": 10}
可以看到至少是由字母順位排序的。
Json 格式的輸出也可以調整成方便人看的樣子:
data = {'a': 100, 'b': 1000, 'c': 10000} output = json.dumps(data, separators=(',\n', ': ')) print(output)
Output:
{"a": 100,
"b": 1000,
"c": 10000}
loads
那麼轉換成 Json 格式的資料我們又該如何在程式碼中讀取呢?以下就由剛才產生的 Json 格式來示範:
jsonFile = \ '''{"a": 100, "b": 1000, "c": 10000}''' output = json.loads(jsonFile) print(output)
Output:
{'a': 100, 'b': 1000, 'c': 10000}
剛才轉換的 Json 檔又被我們轉換回了 Python 的 dict 資料型態了。
dump
接下來開始紀錄比較泛用的儲存成 Json 文件,畢竟大多數時候,我們都是希望儲存成 Json 文件方便以後讀取。
如果說上述的 "dumps()" 函式適用於轉換 Python 資料型態成 Json 格式,那麼 "dump()" 就是將 Python 資料型態存成 Json 檔了。
以下簡單地進行示範:
data = {'a': 100, 'b': 1000, 'c': 10000} with open('abc.json', 'w', encoding='utf-8') as f: json.dump(data, f)
Output:
我們的 data 已經存成在當前目錄底下的 "abc.json" 文件了。我們可以直接打開來瞧瞧裡面的模樣:
我們可以看到,abc.json 裡面存放著的就是 Json 格式的資料。
load
那麼,我們最後一步便是將已經儲存好的資料讀取進程式裡。
with open('abc.json', 'r', encoding='utf-8') as f: output = json.load(f) print(output)
Output:
{'a': 100, 'b': 1000, 'c': 10000}
如何,是否還原回了 Python 的資料型態了呢?只要熟練使用 json 套件,我們可以將許多處理好的資料儲存起來,下次要繼續使用的時候再讀取進來,繼續往下處理,可說是十分方便。
除此之外,由於 Json 受限於儲存的格式,無法支援所有的 Python 資料型態。若想要直接儲存所有的 Python 格式、工作階段,可以參考最底下關於 Python 中 "pickle" 模組的介紹。
References
- https://docs.python.org/3/library/json.html
- https://www.w3schools.com/python/python_json.asp
- https://www.programiz.com/python-programming/json