1. 程式人生 > >Python模組——json

Python模組——json

簡介

json全名是JavaScript Object Notation(即:Javascript物件標記)。它是JavaScript的子集,JSON是輕量級的文字資料交換格式。前端和後端進行資料互動,其實就是js和python進行資料互動,但json資料是不能被python識別的,故需要轉碼,即序列化和反序列化。而今天學習的模組json就是實現這一功能。在python中是自帶這個模組的,故不需要自己另外安裝。

json資料與python資料區別

json資料的名稱必須用雙引號來包括,這也是json資料的特點。下面是兩幅兩個資料的轉化參照圖。

參照上面兩幅圖可以發現,python的集合型別是不能參與轉化到json的,且json資料也沒有set型別。

json方法

首先我們用json的一個魔法方法all來檢視json的方法有哪些?

import json
print (json.__all__)
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']

可以看到上面共有7個方法,下面講解下其中四個最常用的方法。

  • dumps:此方法是將python物件轉換為json物件,實現序列化過程。下面是一個小小例項。
import json
data = {
    'name' : 'wl',
    'age' : 18,
    'tu' : (1,2,3),
    'li' : ['a','b','c'],
    'kong' : None,
    'shi' : True,
    'dict' : {1:2,3:4}
       }
json_data = json.dumps(data)
print(json_data)
{"shi": true, "age": 18, "tu": [1, 2, 3], "kong": null, "li": ["a", "b", "c"], "name": "wl", "dict": {"1": 2, "3": 4}}
  • loads:此方法剛好與dumps方法相反,它實現的是序列化的反過程。
python_data = json.loads(json_data)
print(python_data)
print(type(python_data))
{'tu': [1, 2, 3], 'name': 'wl', 'li': ['a', 'b', 'c'], 'shi': True, 'dict': {'3': 4, '1': 2}, 'kong': None, 'age': 18}
<class 'dict'>

可以發現,python的列表和json的陣列可以相互轉換,但python的元組與json的陣列並不是,元組只能轉換成json的陣列,而陣列卻轉不回去,其只能轉成python的列表。

  • dump:與dumps不同的是,此方法是在檔案裡進行操作序列化的過程,故常常配合於with open語句。
with open('data.json','w+') as f:
    json.dump(data,f)
    f.seek(0)
    print(f.read())
{"dict": {"1": 2, "3": 4}, "name": "wl", "tu": [1, 2, 3], "kong": null, "li": ["a", "b", "c"], "age": 18, "shi": true}
  • load:load方法與dump相反,它實現在檔案中的序列化反過程。
with open('data.json','r') as f:
    print(json.load(f))
{'li': ['a', 'b', 'c'], 'name': 'wl', 'shi': True, 'tu': [1, 2, 3], 'dict': {'3': 4, '1': 2}, 'kong': None, 'age': 18}