Python之json模塊詳解

在python中,可以使用json模塊對JSON數據進行編碼和解碼操作

json模塊主要包含如下模塊:
(1)json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

json.dump()方法的功能主要是對數據進行編碼,將obj序列化爲fp,fp是類文件對象。因爲json模塊總是產生str對象,而不是bytes對象,所以fp.write()必須支持str輸入

# 把Python的類型寫入到類文件對象中
with open("file.txt","w",encoding="utf-8") as f:
	# fp參數指的是類文件對象,具有rend()或write()方法的對象。
    json.dump(a,f)
  • 參數 ensure_ascii爲True(默認值),則保證所有傳入的非ASCII字符都進行轉義。如果爲False,則按字符原樣輸出。
  • 參數check_circular爲False(默認值爲True),則將跳過容器類型的循環引用檢查,循環引用將導致OverflowError錯誤。
  • 參數allow_nan爲False(默認值爲True),則ValueError將序列化超出範圍的浮點值,並嚴格遵守JSON規範。如果allow_nan爲True,則使用與它等效的JS代碼。
  • 如果參數indent的縮進是非負整數或字符串,那麼JSON數組元素和對象成員將以該縮進級別輸出。如果縮進級別是0、負數或"",則只插入換行符。默認值None表示用最緊湊的格式顯示。當使用正整數縮進時,每個級別都有許多空格。如果縮進的字符串(例如"\t"),則該字符串用於縮進每個級別。
  • 參數sort_keys爲True(默認爲False),則字典的輸出將按鍵進行排序。

(2)json.dumps(obj,*,skipkeys=False,ensure_ascii=True,check_circular=True, allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)

json.dumps()方法的功能是使用轉換關係將obj序列化爲JSON格式的str。各個參數的含義與上面的json.dump()完全相同

import json
dict1 = dict(a=1,b=2)
dumps_dict1 = json.dumps(dict1)
print(type(dict1) )
print(dumps_dict1)
print(type(dumps_dict1))

結果

<class 'dict'>
{"a": 1, "b": 2}
<class 'str'>

至於兩者的區別,簡單的來說,如果你是處理文件,就直接用json.dump(),如果處理的是字符串,則用json.dumps()

(3)json.load(fp, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

方法json.load()主要是對數據進行解碼,操作的是一個類對象文件

#把類文件對象轉化爲python 的類型
with open("file.txt","r") as f:
  	json.load(f)
  • 參數object_hook 是一個可選函數,能夠被任何對象字面值解碼的結果所調用。使用的是object_hook的返回值而不是dict。該特徵可以用於實現定製解碼器。
  • object_pairs_hook也是一個可選函數,將使用任何對象字面值的結果進行調用,並使用有序列表進行解碼。使用的是object_pairs_hook的返回值,而不是dict。該特徵可以用於實現依賴鍵-值對的自定義解碼器(例如collections.OrderedDict()會記住插入的順序)。如果還定義了object_hook ,則object_pairs_hook會優先解碼。
  • 如果指定了parse_float,則使用要解碼的每個JSON浮點數類型的字符串進行調用。默認情況下,這相當於float(num_str)。
  • 如果指定了parse_int,則使用要解碼的每個JSON整型字符串進行調用。默認情況下,這相當於int(num_str)。
  • 如果指定了parse_constant,則使用’-Infinity’或者’NaN’調用。這樣,當遇到無效的JSON數字時,可以引發異常。

(4)json.loads(s, *, encoding=None, cls=None,object_hook=None, parse_float=None,parse_int=None, parse_constant=None,object_pairs_hook=None, **kw)

方法json.loads()的功能是使用轉換關係將包含JSON文檔的S(一個str實例)解壓縮爲Python對象。其他參數的含義與方法json.load()完全相同,如果反序列化的數據不是有效的JSON文檔,則會引發JSONDecodeError錯誤。

示例:

import json
dict1 = dict(a=1,b=2)
dumps_dict1 = json.dumps(dict1)
print(type(dumps_dict1))
loads_dict1 = json.loads(dumps_dict1)
print(loads_dict1)
print(type(loads_dict1))

輸出:

<class 'str'>
{'a': 1, 'b': 2}
<class 'dict'>

碼字不易,請多多支持 ,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章