JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,採用徹底獨立於語言的文本格式,支持不一樣程序之間的數據轉換.可是隻能轉換簡單的類型如:(列表、字典、字符串、數字、)等,好比日期格式、類對象等json就處理不了。html
在python中,有專門處理json格式的模塊 json 和 pickle模塊:python
json模塊用於字符串和python數據類型間進行轉換;pickle模塊用於python特有的類型和python的數據類型間進行轉換,並且都提供了dumps、dump、loads、load 4個功能,用法也同樣,不用的是json模塊序列化出來的是通用格式,其它編程語言都認識,就是普通的字符串,而pickle模塊序列化出來的只有python能夠認識,其餘編程語言不認識的,表現爲亂碼。編程
json模塊使用實例:json
引用模塊:數據結構
import json
序列化方法, 將python對象轉換成其餘語言通用的字符串類型:編程語言
json.dump 將數據經過特殊的形式轉爲因此程序語言都認識的字符串,並寫入文件.
json.dumps 將數據經過特殊的形式轉換爲因此程序語言都認識的字符串
實例:編碼
#!/usr/bin/env python #coding:utf-8 import json obj = [123,[1,2,3],'abc',{ 'key' : 'value' ,'key2' : (4,5,6)}] p = json.dumps(obj) print("obj類型:",type(obj)) print(repr(obj)) print("json.dumps後類型:",type(p)) print(p) --------------------------------------------- 執行結果: obj類型: <class 'list'> [123, [1, 2, 3], 'abc', {'key': 'value', 'key2': (4, 5, 6)}] json.dumps後類型: <class 'str'> [123, [1, 2, 3], "abc", {"key": "value", "key2": [4, 5, 6]}] #經過輸出的結果能夠看出,簡單類型經過encode以後跟其原始的repr()輸出結果很是類似,可是有些數據類型進行了改變,例如上例中的元組則轉換爲了列表。在json的編碼過程當中,會存在從python原始類型向json類型的轉化過程.
json.dump() 示例:spa
#!/usr/bin/env python #coding:utf-8 import json dist = {'name' : 'saneri','age' : 18} with open('test.json','w',encoding='utf-8') as f: json.dump(dist,f,indent=4) #indent 超級好用,格式化保存字典,默認爲None,小於0爲零個空格,此處爲4個空格 #f.write(json.dumps(dist,indent=4)) # 和上面的效果同樣
保存的文件test.json效果:code
python 原始類型向 json 類型的轉化對照表:htm
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
反序列化方法,把Json格式字符串解碼轉換成Python對象:
json.load 將一個包含JSON格式數據的可讀文件反序列化爲一個python對象。
json.loads 將包含str類型的JSON文檔反序列化爲一個python對象
實例:
#json.load示例 >>> import json >>> dict = {"name" : "saneri","age" : 23} >>> json.dumps(dict) #將python對象轉爲因此程序有認識的json字符中 '{"name": "saneri", "age": 23}' >>> >>> json.loads('{"name": "saneri", "age": 23}' #將json字符串轉爲python對象. ... ) {'name': 'saneri', 'age': 23} ################################## #從json文件中讀取字符串方法。 with open("test.json", "r", encoding='utf-8') as f: aa = json.loads(f.read()) #loads讀取方法 f.seek(0) bb = json.load(f) # load讀取方法,與 json.loads(f.read())相同 print(aa) print(bb) ---------------------------------------- 執行結果: {'name': 'saneri', 'age': 18} {'name': 'saneri', 'age': 18}
json 類型轉換到 python 的類型對照表:
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
pickle模塊使用實例:
pickle,用於python特有的類型 和 python的數據類型間進行轉換 。
pickle.dumps 將數據經過特殊的形式轉換爲只有python語言認識的字符串
pickle.dump 將數據經過特殊的形式轉換爲只有python語言認識的字符串,並寫入文件
pickle.loads 將pickle數據轉換爲python的數據結構
pickle.load 從數據文件中讀取數據,並轉換爲python的數據結構
實例應用:
1.dumps和loads示例:
>>> import pickle >>> data = ['aa', 'bb', 'cc'] >>> p_str = pickle.dumps(data) #dumps 將數據經過特殊的形式轉換爲只有python語言認識的字符串 >>> print(p_str) b'\x80\x03]q\x00(X\x02\x00\x00\x00aaq\x01X\x02\x00\x00\x00bbq\x02X\x02\x00\x00\x00ccq\x03e.' >>> mes = pickle.loads(p_str) # loads 將pickle數據轉換爲python的數據結構 >>> print(mes) ['aa', 'bb', 'cc'] >>>
2.dump和load示例:
import pickle data = ['aa','bb','cc'] with open('test.pki','wb') as f: pickle.dump(data, f) # dump 將數據經過特殊的形式轉換爲只有python語言認識的字符串,並寫入文件 with open('test.pki','rb') as f: data = pickle.load(f) # load 從數據文件中讀取數據,並轉換爲python的數據結構 print(data)
參考文檔: