1. 程式人生 > 其它 >json函式 Python與JSON(load、loads、dump、dumps)

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也是如此。