Python標準庫-Json模組(轉載)
JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,Python的Json模組有序列化與反序列化兩個過程。即encoding和decoding。
-
encoding:把一個python物件編碼轉換成Json字串。
-
decoding:把json格式字串編碼轉換成python物件。
什麼是序列化、反序列化?
我們把物件(變數)從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。
即把python中的物件變成可儲存的json字串。序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上。
反過來,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling。
Json模組提供了四個功能:dumps、dump、loads、load
JSON表示的物件就是標準的JavaScript語言的物件,JSON和Python內建的資料型別對應如下:
json的4個方法
json提供四個功能:dumps, dump, loads, load
1、dumps和dump
序列化過程
將一個python物件編碼轉換成Json字串,可以儲存可以網路遠端傳輸
dumps只完成了序列化為str,將資料通過特殊的形式轉換為所有程式語言都認識的字串
dump必須傳檔案描述符,將序列化的str儲存到檔案中
import json dic = {"k1":"v1"} str1 ="HelloPython" data1 = json.dumps(dic) data2 = json.dumps(str1) print (data1),type(data1) print (data2), type(data2)
with open("test.json","w+") as f:
json.dump(dic,f)
輸出結果:
{"k1":"v1"} <class 'str'>
"HelloPython" <class 'str'>
生成一個test.json的檔案,內容:
{"k1":"v1"}
2、loads 和 load
loads 只完成了反序列化,將json編碼的字串再轉換為python的資料結構
load 只接收檔案描述符,完成了讀取檔案和反序列化,資料檔案中讀取資料,並將json編碼的字串轉換為python的資料結構
1 import json 2 3 4 with open("test.json") as f: 5 data = json.load(f) 6 #data = json.loads(f.read()) 7 8 print (data) 9 print (type(data))
輸出結果:
{"k1":"v1"} <class 'dict'>