Python 處理 JSON 數據資料
Python 處理 JSON 數據資料
大綱
前言
JSON 資料在 Python 存在的方式是 "字串" 格式,使用 json 模組將資料轉成JSON字串或是JSON檔案。
JSON in Python
Python 有一個名為 json 的內置套件包,可用於處理 JSON 數據。
import json
json.loads() - 將JSON資料 載入 Python
使用 json.loads() 方法,將 JSON 資料 載入 Python,下列是轉換表:
----- JSON資料 ----- | ----- Python資料 ----- |
---|---|
object | dict |
array | list |
string | unicode |
number(int) | int, long |
number(real) | float |
true | True |
false | False |
null | None |
範例 pythonJson-01.py : 注意,JSON資料須加上 '' 單引號,因為JSON資料再Python中是以字串形式存在的。
# pythonJson-01.py import json jsonObj = '{"b":80, "a":25, "c":60}' # json物件 dictObj = json.loads(jsonObj) # 轉成Python物件 print(dictObj) print(type(dictObj))
執行結果
{'b': 80, 'a': 25, 'c': 60}
<class 'dict'>
範例 pythonJson-02.py :
# pythonJson-02.py import json x = '{ "name":"John", "age":30, "city":"New York"}' # some JSON: y = json.loads(x) # parse x: print(y["age"]) # the result is a Python dictionary:
執行結果
30
<class 'str'>
範例 pythonJson-03.py : 使用多層次JSON物件,在 父JSON物件"Asia"下建立兩個 子JSON物件 "Japan"、"China"。
# pythonJson-03.py import json obj = '{"Asia":[{"Japan":"Tokyo"},{"China":"Beijing"}]}' json_obj = json.loads(obj) print(json_obj) print(type(json_obj)) print(json_obj["Asia"]) print(json_obj["Asia"][0]) print(json_obj["Asia"][1]) print(json_obj["Asia"][0]["Japan"]) print(json_obj["Asia"][1]["China"])
執行結果
{'Asia': [{'Japan': 'Tokyo'}, {'China': 'Beijing'}]}
<class 'dict'>
[{'Japan': 'Tokyo'}, {'China': 'Beijing'}]
{'Japan': 'Tokyo'}
{'China': 'Beijing'}
Tokyo
Beijing
json.dumps() - 將Python資料 導出 為JSON字串
如果您有 Python 物件,則可以使用 json.dumps() 方法將 Python 資料 導出 為 JSON 字串,下列是轉換表:
------Python資料------- | ------JSON資料------- |
---|---|
dict | Object |
list, tuple | Array |
str, unicode | String |
int, float, long | Number |
True | true |
False | false |
None | null |
範例 pythonJson-04.py : 將 Python 串列與元組資料轉換成JSON陣列資料
# pythonJson-04.py import json listNumbers = [5, 10, 20, 1] # 串列資料 tupleNumbers = (1, 5, 10, 9) # 元組資料 jsonData1 = json.dumps(listNumbers) # 將串列資料轉成json資料 jsonData2 = json.dumps(tupleNumbers) # 將串列資料轉成json資料 print("串列轉換成json的陣列", jsonData1) print("元組轉換成json的陣列", jsonData2) print("json陣列在Python的資料類型 ", type(jsonData1))直
執行結果
串列轉換成json的陣列 [5, 10, 20, 1]
元組轉換成json的陣列 [1, 5, 10, 9]
json陣列在Python的資料類型 <class 'str'>
範例 pythonJson-05.py : json.dumps() 方法,使用參數: sort_keys,ident
# pythonJson-05.py import json players = {'Stephen Curry':'Golden State Warriors', 'Kevin Durant':'Golden State Warriors', 'Lebron James':'Cleveland Cavaliers', } jsonObj = json.dumps(players, sort_keys=True, indent=4) print(jsonObj) print(type(jsonObj))
執行結果
{
"Kevin Durant": "Golden State Warriors",
"Lebron James": "Cleveland Cavaliers",
"Stephen Curry": "Golden State Warriors"
}
<class 'str'>
利用dump()與load()存取JSON檔案
利用 dump() 將Python資料儲存為JSON檔案
這邊要特別注意,用來存取JSON檔案的函數名稱是叫作 dump() 與 load(),函數名稱後面沒有加s,在 python 內將 python 資料與以字串呈現的 JSON 格式轉換的函數名稱是叫作 dumps() 與 loads(),函數名稱後面有加s。
在Python中讀/寫檔的語法為 with...open 。
範例 pythonJson-06.py : 將一個基本型態的Python字典資料 dictObj ,使用 dump(),將其儲存為檔案 output-pythonJson-06.json。dump() 第一個參數 dictObj 是資料來源,第二個參數 fileObj 是檔案物件。 在工作附錄中會產生一個檔案 output-pythonJson-06.json,可使用筆記本打開。
# pythonJson-06.py import json dictObj = {'b':80, 'a':25, 'c':60} # 字典資料 fileName = 'output-pythonJson-06.json' # 輸出檔案 with open(fileName, 'w') as fileObj: # 開啟檔案物件 json.dump(dictObj, fileObj) # 將字典資料儲存為檔案
執行結果
{"b": 80, "a": 25, "c": 60}
範例 pythonJson-07.py : 將一個2層次的JSON陣列的Python字典資料 dictObj ,使用 dump(),將其儲存為檔案 output-pythonJson-06.json。dump() 第一個參數 dictObj 是資料來源,第二個參數 fileObj 是檔案物件。 在工作附錄中會產生一個檔案 output-pythonJson-07.json,可使用筆記本打開。
# pythonJson-07.py import json dictObj = {"Asia": [{"Japan":"Tokyo"}, {"China":"Beijing"}], "Europe": [{"UK":"London"}, {"France":"Paris"}] } fileName = 'output-pythonJson-07.json' with open(fileName, 'w') as fileObj: json.dump(dictObj, fileObj)
執行結果
{"Asia": [{"Japan": "Tokyo"}, {"China": "Beijing"}], "Europe": [{"UK": "London"}, {"France": "Paris"}]}
範例 pythonJson-08.py : 儲存資料為一個包含中文字的串列物件 objList ,在工作附錄中會產生一個檔案 output-pythonJson-08.json,可使用筆記本打開。若打開時會看到中文字 "日本" 顯示為16進位碼 "\u65e5\u672c"....等。
# pythonJson-08.py import json objList = [{"日本":"Japan", "首都":"Tykyo"}, {"美州":"USA", "首都":"Washington"}] fileName = 'output-pythonJson-08.json' with open(fileName, 'w') as fileObj: json.dump(objList, fileObj)
執行結果
[{"\u65e5\u672c": "Japan", "\u9996\u90fd": "Tykyo"}, {"\u7f8e\u5dde": "USA", "\u9996\u90fd": "Washington"}]
範例 pythonJson-09.py : 儲存資料為一個包含中文字的串列物件 objList。改善範例 pythonJson-08.py ,使用編碼方式 encoding='utf-8' 創建一個檔案物件,存檔時搭配 ensure_ascii=False
# pythonJson-09.py import json objList = [{"日本":"Japan", "首都":"Tykyo"}, {"美州":"USA", "首都":"Washington"}] fileName = 'output-pythonJson-09.json' with open(fileName, 'w', encoding='utf-8') as fileObj: json.dump(objList, fileObj, indent=2, ensure_ascii=False)
執行結果
[ { "日本": "Japan", "首都": "Tykyo" }, { "美州": "USA", "首都": "Washington" } ]
利用 load() 讀取JSON檔案
範例 pythonJson-10.py : 讀取檔案 'output-pythonJson-07.json' 並列出結果。
# pythonJson-10.py import json fileName = 'output-pythonJson-07.json' with open(fileName, 'r') as fileObj: data = json.load(fileObj) print(data) print(type(data))
執行結果
{'Asia': [{'Japan': 'Tokyo'}, {'China': 'Beijing'}], 'Europe': [{'UK': 'London'}, {'France': 'Paris'}]}
<class 'dict'>
範例 pythonJson-11.py : 執行程式時,會要求輸入帳號,同時會將帳號存檔為 "login.json",然後會印出 " __帳號__! 歡迎回來使用本系統! "。
# pythonJson-11.py import json fileName = 'login.json' login = input("請輸入帳號 : ") with open(fileName, 'w') as fileObj: json.dump(login, fileObj) print("%s! 歡迎使用本系統! " % login)
執行結果
請輸入帳號 : aron
aron! 歡迎使用本系統!
範例 pythonJson-12.py : 延續 範例 pythonJson-11.py ,讀取檔案 'login.json' 並印出 "__帳號__ ! 歡迎回來使用本系統! "
# pythonJson-12.py import json fileName = 'login.json' with open(fileName, 'r') as fileObj: login = json.load(fileObj) print("%s! 歡迎回來使用本系統! " % login)
執行結果
請輸入帳號 : aron
aron! 歡迎回來使用本系統!
範例 pythonJson-13.py : 登入系統,若 登入檔案 'login1_13.json' 不存在,要求 "請輸入帳號 : ",若 登入檔案 'login1_13.json' 已存在,則顯示歡迎回來。
# pythonJson-13.py import json fileName = 'login.json' try: with open(fileName) as fileObj: login = json.load(fileObj) except Exception: login = input("請輸入帳號 : ") with open(fileName, 'w') as fileObj: json.dump(login, fileObj) print("系統已經記錄你的帳號!") else: print("%s 歡迎回來!" % login)
執行結果
aron 歡迎回來!
參考資料
特色、摘要,Feature、Summary:
關鍵字、標籤,Keyword、Tag:
- Programming-Language,Json,Python,Data-Model,Python-Tutorial,
留言
張貼留言
Aron阿龍,謝謝您的留言互動!