Skip to content

[Python] 使用 Json 套件讀寫 Json 格式文件

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


Read More

Leave a Reply