python 序列化模塊之 json 和 pickle

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)

 

 參考文檔:

    http://www.javashuo.com/article/p-qsbluwgq-en.html

相關文章
相關標籤/搜索