json函式 Python與JSON(load、loads、dump、dumps)
Python與JSON(load、loads、dump、dumps)
1.Python中載入JSON
使用loads(string):作用將string型別轉為dict字典或dict連結串列
# 載入配置,configuration_path:配置檔案路徑 def load_conf(configuration_path): with open(configuration_path, 'r') as f: string = f.read() return json.loads(string)
使用load(file_stream):作用從檔案流直接讀取並轉換為dict字典或dict字典連結串列
# 載入配置,configuration_path:配置檔案路徑 def load_conf(configuration_path): with open(configuration_path, 'r') as f: data = json.load(f) return data
2.Python寫入JSON
使用dumps():將可以轉換為json物件的物件轉換為String,然後可通過字元流或位元組流寫入檔案
def save_conf(confiuration_path, pre_trans_obj): #先用dunps轉為string,然後字元流寫入 #ensure_ascii=False, 減少亂碼 json_string = json.dumps(pre_trans_obj, ensure_ascii=False) with open(confiuration_path,'w') as f: f.write(json_string)
使用dump():將可轉為json物件的物件直接寫入檔案(將兩個步驟結合成一個步驟)
def save_conf(confiuration_path, pre_trans_obj): with open(confiuration_path,'w') as f: json.dump(pre_trans_obj, f, ensure_ascii=False)
3.寫入時中文亂碼
寫入時可能遇到兩種中文亂碼問題:
(1)顯示ASCII碼,情況如下:
原因是,dumps或dump編碼時使用了ASCII嗎編碼中文,只需要在dumps或dump引數中新增引數:ensure_ascii=False,將ascii編碼關閉即可。
(2)顯示未知字元,情況如下:
原因是,存入的json檔案預設編碼為ANSI,而VsCode(IDE)以UTF-8格式開啟,所以會出現這樣的錯誤,其他的寫入也可能出現類似的問題,檢查是否因為這樣的問題,用記事本開啟檔案,顯示如下:(注意右下角)
解決方法:使用open函式時指定編碼格式utf-8,即新增引數:encoding=‘utf-8’,完整程式碼如下:
def save_conf(confiuration_path, pre_trans_obj): #先用dunps轉為string,然後字元流寫入 #ensure_ascii=False, 減少亂碼 json_string = json.dumps(pre_trans_obj, ensure_ascii=False) with open(confiuration_path,'w',encoding='utf-8') as f: f.write(json_string)
注意:任何時候都應注意開啟檔案的格式,比如ide會預設設定為GBK等等,所以讀取、寫入檔案都應使用統一格式。同理:在Web開發時Request和Response也是如此。
1.Python中載入JSON
使用loads(string):作用將string型別轉為dict字典或dict連結串列
# 載入配置,configuration_path:配置檔案路徑 def load_conf(configuration_path): with open(configuration_path, 'r') as f: string = f.read() return json.loads(string)
使用load(file_stream):作用從檔案流直接讀取並轉換為dict字典或dict字典連結串列
# 載入配置,configuration_path:配置檔案路徑 def load_conf(configuration_path): with open(configuration_path, 'r') as f: data = json.load(f) return data
2.Python寫入JSON
使用dumps():將可以轉換為json物件的物件轉換為String,然後可通過字元流或位元組流寫入檔案
def save_conf(confiuration_path, pre_trans_obj): #先用dunps轉為string,然後字元流寫入 #ensure_ascii=False, 減少亂碼 json_string = json.dumps(pre_trans_obj, ensure_ascii=False) with open(confiuration_path,'w') as f: f.write(json_string)
使用dump():將可轉為json物件的物件直接寫入檔案(將兩個步驟結合成一個步驟)
def save_conf(confiuration_path, pre_trans_obj): with open(confiuration_path,'w') as f: json.dump(pre_trans_obj, f, ensure_ascii=False)
3.寫入時中文亂碼
寫入時可能遇到兩種中文亂碼問題:
(1)顯示ASCII碼,情況如下:
原因是,dumps或dump編碼時使用了ASCII嗎編碼中文,只需要在dumps或dump引數中新增引數:ensure_ascii=False,將ascii編碼關閉即可。
(2)顯示未知字元,情況如下:
原因是,存入的json檔案預設編碼為ANSI,而VsCode(IDE)以UTF-8格式開啟,所以會出現這樣的錯誤,其他的寫入也可能出現類似的問題,檢查是否因為這樣的問題,用記事本開啟檔案,顯示如下:(注意右下角)
解決方法:使用open函式時指定編碼格式utf-8,即新增引數:encoding=‘utf-8’,完整程式碼如下:
def save_conf(confiuration_path, pre_trans_obj): #先用dunps轉為string,然後字元流寫入 #ensure_ascii=False, 減少亂碼 json_string = json.dumps(pre_trans_obj, ensure_ascii=False) with open(confiuration_path,'w',encoding='utf-8') as f: f.write(json_string)
注意:任何時候都應注意開啟檔案的格式,比如ide會預設設定為GBK等等,所以讀取、寫入檔案都應使用統一格式。同理:在Web開發時Request和Response也是如此。