2022-06-23|閱讀時間 ‧ 約 8 分鐘

不間斷 Python 挑戰 Day 34 - JSON

JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式,Python與許多其它的程式語言皆有支援。
Python處理JSON格式資料時須先導入內建的json模組,接著我們就可以來看JSON的資料格式,以及在Python中是如何處理資料格式的轉換,與讀寫JSON的方式。
import json

JSON資料格式

JSON有兩種資料格式:
  • 物件(object):包含在大括號 { } 中,以「鍵(key):值(value)」對的方式儲存資料,不同的鍵值對間以逗號「,」隔開。其中鍵是一個字串(string),值可以是字串、數值(number)、物件(object)、陣列(array)、布林值(true/false)、或是一個空值(null)。
物件的資料結構,來源:json.org
物件的資料結構,來源:json.org
值的種類,來源:json.org
  • 陣列(array):包含在中括號 [ ] 中,由一系列的值(value)所組成,值與值之間以逗號「,」分隔。值可以是字串、數值(number)、物件(object)、陣列(array)、布林值(true/false)、或是一個空值(null)。
陣列的資料結構,來源:json.org

Python與JSON格式資料互換

json模組的dumps()與loads()方法可執行資料互換的功能:
  • dumps():將Python資料轉換為JSON格式。
  • loads():將JSON格式資料轉換為Python資料。

串列與JSON陣列互換
Python串列經過dumps()轉換成JSON陣列,在Python的資料格式為字串,再經loads()轉換回Python串列。
number_list = [2, 4, 6, 8, 10]
number_json = json.dumps(number_list)
number_list_from_json = json.loads(number_json)

print(number_json)
print(type(number_json))
print(number_list_from_json)
print(type(number_list_from_json))
執行結果:
[2, 4, 6, 8, 10]
< class 'str'>
[2, 4, 6, 8, 10]
< class 'list'>

字典與JSON物件互換
Python字典經過dumps()轉換成JSON物件,在Python的資料格式為字串,再經loads()轉換為Python字典。
password_dict = {
  "Google": {
    "url": "www.google.com",
    "username": "user",
    "password": "fj;sagjpwej;"
  }
}
password_json = json.dumps(password_dict)
password_list_from_json = json.loads(password_json)

print(password_json)
print(type(password_json))
print(password_list_from_json)
print(type(password_list_from_json))
執行結果:
{"Google": {"url": "www.google.com", "username": "user", "password": "fj;sagjpwej;"}}
 < class 'str'>
{'Google': {'url': 'www.google.com', 'username': 'user', 'password': 'fj;sagjpwej;'}}
 < class 'dict'>

JSON檔案處理

json模組的dump()與load()方法可對JSON檔案進行讀寫:
  • dump():將Python資料轉換為JSON檔案,資料將轉換為JSON格式。
  • load():從JSON檔案中讀取資料,資料將轉換為Python格式。

Python資料轉為JSON檔案
沿用上方使用過的字典,這次我們直接將字典轉成JSON的檔案格式,副檔名是 .json。和開啟文字文件的方式一樣,需要先以open()方法開啟或創建JSON檔案,再使用dump()方法將資料寫入,其中dump()帶入的第一個參數是要儲存的Python資料,第二個參數是要存入的檔案物件。
password_dict = {
  "Google": {
    "url": "www.google.com",
    "username": "user",
    "password": "fj;sagjpwej;"
  }
}

with open("password.json", "w") as password_file:
  json.dump(password_dict, password_file)
執行後,PyCharm的Project欄位會出現剛寫入的檔案password.json,內容即是我們所儲存的字典資料。
生成password.json檔案
password.json檔案內容
若要使JSON檔案的內容更容易閱讀,可在使用dump()方法時增加indent參數,適當設定縮排的字元長度。
json.dump(password_dict, password_file, indent=4)
縮排後的password.json檔案內容

從JSON檔案讀取資料
在寫入了JSON檔案的資料後,即可用load()方法將檔案內容讀取出來。和寫入時相同,首先先以open()方法開啟JSON檔案,屬性設為讀取,接著使用load()方法取出資料,在此例中JSON資料將會轉換為字典格式。
with open("password.json", "r") as password_file:
  password_dict_from_json_file = json.load(password_file)

print(password_dict_from_json_file)
print(type(password_dict_from_json_file))
執行結果:
{'Google': {'url': 'www.google.com', 'username': 'user', 'password': 'fj;sagjpwej;'}}
 < class 'dict'>

總結

這篇文章介紹了JSON資料的基本格式,以及Python格式資料與JSON資料的互換,並且可以讀寫JSON檔案。在下篇文章中,我們將實際應用JSON格式,改寫密碼產生器的儲存方式,並進一步增加密碼搜尋的功能,讓密碼產生器的功能更加完備。

程式範例

分享至
成為作者繼續創作的動力吧!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

作者的相關文章

Wei-Jie Weng的沙龍 的其他內容

你可能也想看

發表回應

成為會員 後即可發表留言
© 2024 vocus All rights reserved.