使用 Python 處理 JSON 格式的資料

2019-07-21 23:57:00

如果你不希望從頭開始創造一種資料格式來存放資料,JSON 是一個很好的選擇。如果你對 Python 有所了解,就更加事半功倍了。下面就來介紹一下如何使用 Python 處理 JSON 資料。

JSON 的全稱是 JavaScript 物件表示法JavaScript Object Notation。這是一種以鍵值對的形式儲存資料的格式,並且很容易解析,因而成為了一種被廣泛使用的資料格式。另外,不要因為 JSON 名稱而望文生義,JSON 並不僅僅在 JavaScript 中使用,它也可以在其它語言中使用。下文會介紹它是如何在 Python 中使用的。

首先我們給出一個 JSON 範例:

{    "name":"tux",    "health":"23",    "level":"4"}

上面是一個和程式語言無關的原生 JSON 資料。熟悉 Python 的人會看出來這個 JSON 資料跟 Python 中的字典dictionary長得很像。而這兩者之間確實非常相似,如果你對 Python 中的列表和字典資料結構有一定的理解,那麼 JSON 理解起來也不難。

使用字典存放資料

如果你的應用需要儲存一些結構複雜的資料,不妨考慮使用 JSON 格式。對比你可能曾經用過的自定義格式的文字組態檔,JSON 提供了更加結構化的可遞回的儲存格式。同時,Python 自帶的 json 模組已經提供了可以將 JSON 資料匯入/匯出應用時所需的所有解析庫。因此,你不需要針對 JSON 自行編寫程式碼進行解析,而其他開發人員在與你的應用進行資料互動的時候也不需要去解析新的資料格式。正是這個原因,JSON 在資料交換時被廣泛地採用了。

以下是一段在 Python 中使用巢狀字典的程式碼:

#!/usr/bin/env python3import json# instantiate an empty dictteam = {}# add a team memberteam['tux'] = {'health': 23, 'level': 4}team['beastie'] = {'health': 13, 'level': 6}team['konqi'] = {'health': 18, 'level': 7}

這段程式碼宣告了一個名為 team 的字典,並初始化為一個空字典。

如果要給這個字典新增內容,首先需要建立一個鍵,例如上面範例中的 tuxbeastiekonqi,然後為這些鍵一一提供對應的值。上面範例中的值由一個個包含遊戲玩家資訊的字典充當。

字典是一種可變的變數。字典中的資料可以隨時新增、刪除或更新。這樣的特性使得字典成為了應用程式儲存資料的極好選擇。

使用 JSON 格式儲存資料

如果存放在字典中的資料需要持久儲存,這些資料就需要寫到檔案當中。這個時候就需要用到 Python 中的 json 模組了:

with open('mydata.json', 'w') as f:    json.dump(team, f)

上面的程式碼首先建立了一個名為 mydata.json 的檔案,然後以寫模式開啟了這個檔案,這個被開啟的檔案以變數 f 表示(當然也可以用任何你喜歡的名稱,例如 fileoutput 等)。而 json 模組中的 dump() 方法則是用於將一個字典輸出到一個檔案中。

從應用中匯出資料就是這麼簡單,同時這些匯出的資料是結構化的、可理解的。現在可以檢視匯出的資料:

$ cat mydata.json{"tux": {"health": 23, "level": 4}, "beastie": {"health": 13, "level": 6}, "konqi": {"health": 18, "level": 7}}

從 JSON 檔案中讀取資料

如果已經將資料以 JSON 格式匯出到檔案中了,也有可能需要將這些資料讀回到應用中去。這個時候,可以使用 Python json 模組中的 load() 方法:

#!/usr/bin/env python3import jsonf = open('mydata.json')team = json.load(f)print(team['tux'])print(team['tux']['health'])print(team['tux']['level'])print(team['beastie'])print(team['beastie']['health'])print(team['beastie']['level'])# when finished, close the filef.close()

這個方法實現了和儲存檔案大致相反的操作。使用一個變數 f 來表示開啟了的檔案,然後使用 json 模組中的 load() 方法讀取檔案中的資料並存放到 team 變數中。

其中的 print() 展示了如何檢視讀取到的資料。在過於複雜的字典中迭代呼叫字典鍵的時候有可能會稍微轉不過彎來,但只要熟悉整個資料的結構,就可以慢慢摸索出其中的邏輯。

當然,這裡使用 print() 的方式太不靈活了。你可以將其改寫成使用 for 迴圈的形式:

for i in team.values():    print(i)

使用 JSON

如上所述,在 Python 中可以很輕鬆地處理 JSON 資料。因此只要你的資料符合 JSON 的模式,就可以選擇使用 JSON。JSON 非常靈活易用,下次使用 Python 的時候不妨嘗試一下。