首頁  >  文章  >  後端開發  >  json與pickle的用法介紹

json與pickle的用法介紹

PHP中文网
PHP中文网原創
2017-06-21 16:48:501158瀏覽

json

json是程式資料型態的序列化與反序列化的模組之一。利用它可以進行不同平台,不同程式下的資料交換或是程式暫時保存資料的一種方法。下面看一看json的用法:

 1 #json_序列化.py 2 import json 3 dic={ 4     "id":"123456", 5     "name":"Jack", 6     "country":"China" 7     } 8 date=json.dumps(dic) 9 with open("demo.txt","w") as f:10     f.write(date)11 12 #json_反序列化.py13 import json14 with open("demo.txt","r") as f:15     dic1=json.loads(f.read())16 print(dic1["name"])

上面展示了兩個檔案的內容,第一個檔案是將一個字典序列化成字符串(使用dumps()方法),然後寫入一個檔案(demo.txt)。第二個檔案是將demo.txt中的內容讀取出來,然後用loads()方法將其反序列化可以執行的那個字典對象,並且印出字典的「name」的內容。

其實除了dumps()和loads()兩個方法之外,json還有兩個比較簡單的方法:dump()和load()。以下示範用法:

 1 #json_序列化2.py 2 import json 3 dic={ 4     "id":"123456", 5     "name":"Jack", 6     "country":"China" 7     } 8 with open("demo.txt","w") as f: 9     date=json.dump(dic,f)10 11     12 13 #json_反序列化2.py14 import json15 with open("demo.txt","r") as f:16     dic1=json.load(f)17 print(dic1["name"])

對比一下就知道,dump()和load()是將dumps()和loads()以及檔案的讀寫操作進行的封裝。

 

pickle

#pickle同樣擁有json的上述四種方法,並且用法一模一樣,在這裡我就不做演示。但是pickle的功能更加強大。 json只能夠序列化一些比較簡單的資料對象,如列表,字典等等。而pickle則還可以序列化函數,類別等複雜物件。

下面示範pickle怎麼序列化、反序列化一個函數。

 1 #pickle_序列化.py 2 import pickle 3 #定义函数hello 4 def hello(name): 5     print("hello",name) 6 #定义列表,把hello也存进去 7 dic1={ 8     "name":"Mark", 9     "func":hello10     }11 with open("demo.txt","wb") as f:12     pickle.dump(dic1,f)13 14 #pickle_反序列化.py15 import pickle16 #######################17 def hello(name):18     print("hello",name)19 #######################20 with open("demo.txt","rb")as f:21     dic2=pickle.load(f)22 dic2["func"]("Jack")

上面同樣展示了兩個檔案的內容注意。要注意以下的問題:

1.當涉及到函數,類別等的序列化和反序列化的時候,在打開文件的時候都要以二進制的形式打開,注意展示中的“wb ”,“rb”

2.如果要使反序列化出來的函數可以再新文件裡執行的話,必須要把前面定義好的函數的源代碼複製到新文件裡(注意pickle_反序列化.py中的兩排#行內的內容),否則將無法運行,如果沒有#號內的內容的話,程式會報錯:AttributeError: Can't get attribute 'hello' on

3.可以對複製過來的函數的原始程式碼進行更改,只需要確保函數名稱與序列化時所用的函數名稱一致即可,更改後如果呼叫函數,則按照更改後的函數執行(當然這種更改必須是有必要的)

以上是json與pickle的用法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn