不間斷 Python 挑戰 Day 34 - JSON

更新於 發佈於 閱讀時間約 8 分鐘

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)。
raw-image
raw-image
  • 陣列(array):包含在中括號 [ ] 中,由一系列的值(value)所組成,值與值之間以逗號「,」分隔。值可以是字串、數值(number)、物件(object)、陣列(array)、布林值(true/false)、或是一個空值(null)。
raw-image

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,內容即是我們所儲存的字典資料。

raw-image
raw-image

若要使JSON檔案的內容更容易閱讀,可在使用dump()方法時增加indent參數,適當設定縮排的字元長度。

json.dump(password_dict, password_file, indent=4)
raw-image

從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格式,改寫密碼產生器的儲存方式,並進一步增加密碼搜尋的功能,讓密碼產生器的功能更加完備。

程式範例

https://github.com/wjweng/marathon_python/tree/master/Day34






留言
avatar-img
留言分享你的想法!
avatar-img
Wei-Jie Weng的沙龍
48會員
36內容數
Wei-Jie Weng的沙龍的其他內容
2022/07/13
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
Thumbnail
2022/07/13
對於程式的初學者而言,理解程式的流程、迴圈的進行、或是變數的變化會需要一定程度將程式在腦中進行運算的能力,要一段時間熟悉與適應,尤其是當程式執行的結果不如預期時,往往是計算的過程和自己所想像的不同,這時又更難靠自己的能力找出錯誤。因此,這邊要介紹的這個工具可以將程式執行的過程逐行將變數的變化視覺化地
Thumbnail
2022/07/13
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
2022/07/13
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
2022/06/01
不管你是程式的新手或老手,不管你是不是第一天寫Python程式,在編譯或執行時絕對有出現程式錯誤或異常的時候,也就是俗稱的「bug」,這對於程式編譯人員是好事,你可以在程式撰寫階段就事先排除這些異常,或是加上捕捉異常的程式區段以及處理程序,讓程式即使出現異常也可以繼續執行。
Thumbnail
2022/06/01
不管你是程式的新手或老手,不管你是不是第一天寫Python程式,在編譯或執行時絕對有出現程式錯誤或異常的時候,也就是俗稱的「bug」,這對於程式編譯人員是好事,你可以在程式撰寫階段就事先排除這些異常,或是加上捕捉異常的程式區段以及處理程序,讓程式即使出現異常也可以繼續執行。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
JSON(JavaScript Object Notation)是一種用於資料交換的輕量級資料格式,通常用於網路應用程式之間的資料傳遞。 JSON的格式易於閱讀和撰寫,也易於解析和產生,因此它在開發中被廣泛使用。 JSON由兩種結構組成:物件(Object)和陣列(Array)。
Thumbnail
JSON(JavaScript Object Notation)是AJAX(參考:[PHP][AJAX]介紹)常用的資料交換格式。在PHP有提供函數,可以將資料轉換成JSON。除外JSON比XML快速且簡單。 語法 資料是由鍵和值(Key-value)組成。 鍵和值之間用「:」區隔。 資料之
Thumbnail
JSON(JavaScript Object Notation)是AJAX(參考:[PHP][AJAX]介紹)常用的資料交換格式。在PHP有提供函數,可以將資料轉換成JSON。除外JSON比XML快速且簡單。 語法 資料是由鍵和值(Key-value)組成。 鍵和值之間用「:」區隔。 資料之
Thumbnail
我們在「【💊 Python的解憂錦囊】如何將dict轉成json並儲存」有介紹過如何將dict型態的資料轉換成json,除了json之外, 另一個耳熟能詳的資料交換格式就是csv了, 我們常常會將csv讀進來, 並使用預先設計的@dataclass來存放, 如此一來實際運行時, 更能夠貼近於我
Thumbnail
我們在「【💊 Python的解憂錦囊】如何將dict轉成json並儲存」有介紹過如何將dict型態的資料轉換成json,除了json之外, 另一個耳熟能詳的資料交換格式就是csv了, 我們常常會將csv讀進來, 並使用預先設計的@dataclass來存放, 如此一來實際運行時, 更能夠貼近於我
Thumbnail
關於json的資料交換格式請參考「【程式語言 - Javascript】輕量資料格式 JSON」, 我們常常會在使用套件的過程中發現回傳值的型態都會有「dict」的蹤跡, 為什麼呢? 因為動態、彈性、靈活, 不需要預先定義類別來明確指定每個欄位的內容, 但缺點就是文件必須寫清楚內容物是哪些, 否
Thumbnail
關於json的資料交換格式請參考「【程式語言 - Javascript】輕量資料格式 JSON」, 我們常常會在使用套件的過程中發現回傳值的型態都會有「dict」的蹤跡, 為什麼呢? 因為動態、彈性、靈活, 不需要預先定義類別來明確指定每個欄位的內容, 但缺點就是文件必須寫清楚內容物是哪些, 否
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 身為專業的軟體開發者的我們, 除了讓程式會動之外, 也
Thumbnail
您是否苦於網路資訊爆炸嗎? 教學何其多,但卻無法好好選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。 身為專業的軟體開發者的我們, 除了讓程式會動之外, 也
Thumbnail
序列化(serialization)是將資料結構或對象轉換為一個格式,可以被儲存到文件或記憶體中,或者可以透過網路傳輸到另一個系統環境。這使得資料可以在不同的系統之間進行交換,並在需要時重新建構回原始的資料結構。本文將介紹兩個好用的Python套件-JSON與Pickle,並比較兩者的不同。
Thumbnail
序列化(serialization)是將資料結構或對象轉換為一個格式,可以被儲存到文件或記憶體中,或者可以透過網路傳輸到另一個系統環境。這使得資料可以在不同的系統之間進行交換,並在需要時重新建構回原始的資料結構。本文將介紹兩個好用的Python套件-JSON與Pickle,並比較兩者的不同。
Thumbnail
JSON 全名 JavaScript Object Notation,其格式基本上就是key: value的組成如下: { "name": "Bob", "age": 40, "childs": [ { "name": "Justin", "
Thumbnail
JSON 全名 JavaScript Object Notation,其格式基本上就是key: value的組成如下: { "name": "Bob", "age": 40, "childs": [ { "name": "Justin", "
Thumbnail
JSON(JavaScript Object Notation)是一種常用的數據交換格式,用於在不同的應用程序之間傳遞結構化數據。在C#中,我們可以使用Newtonsoft.Json模組來處理JSON資料。
Thumbnail
JSON(JavaScript Object Notation)是一種常用的數據交換格式,用於在不同的應用程序之間傳遞結構化數據。在C#中,我們可以使用Newtonsoft.Json模組來處理JSON資料。
Thumbnail
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
在上一節介紹了 JSON 資料的基本架構後,我們將改寫並擴充密碼產生器程式,讓它能夠藉由 JSON 的資料結構完成帳密搜尋的功能。
Thumbnail
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。
Thumbnail
JSON的全名叫JavaScript Object Notation,是由Douglas Crockford所設計的一種資料格式,最初應用在JavaScript程式語言中,做為一種資料交換的格式,而後被廣泛運用在Web開發與NoSQL資料庫,現今已成為一種重要的資料格式。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News