python中json模块博客园_python的json模块
python的json模塊
什么是序列化和反序列化?
序列化
在分布式環境下,無論是何種數據,都會以二進制序列的形式在網絡上傳輸。序列化是一種將對象以一連串的字節描述的過程,用于解決在對對象流進行讀寫操作
時所引發的問題。序列化可以將對象的狀態寫在流里進行網絡傳輸,或保存在文件、數據庫里,并在需要時把該流讀取出來重新構造一個相同的對象。
反序列化
就是將流轉為對象。
json
我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flatte
ning等等,都是一個意思。序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上。反過來,把變量內容從序列化的對象重新讀到內存里
稱之為反序列化,即unpickling。
如果我們要在不同的編程語言之間傳遞對象,就必須把對象序列化為標準格式,比如XML,但更好的方法是序列化為JSON,因為JSON表示出來就是一個字符串,可
以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。JSON不僅是標準格式,并且比XML更快,而且可以直接在Web頁面中讀取,非常方便。
介紹使用四個方法
json.dumps()
json.dump()
json.loads()
json.load()
一般存儲數據的方法
在介紹之間我們先說一下,當我們在存儲數據的時候,一定要是字符串的類型才能存儲。
下面是一個簡單的存數據的程序
dic={"name":"linlin"}
#將字典類型轉為字符串類型
data1=str(dic)
f1=open('file1','w')
#存入數據
f1.write(data1)
f1.close()
取出數據
f2=open('file1','r')
data2=f2.read()
print(data2)
print(type(data2))
data2=eval(data2)
print(data2['name'])
f2.close()
運行結果
我們從文件取出來,如果不使用eval函數,取出來還是字符串類型,就不能直接根據鍵名來使用鍵值
eval內置方法可以將一個字符串轉成python對象
eval內置方法可以將一個字符串轉成python對象,不過,eval方法是有局限性的,對于普通的數據類型,json.loads和eval都能用,但遇到特殊類型的時候,
eval就不管用了,所以eval的重點還是通常用來執行一個字符串表達式,并返回表達式的值。
json.dumps()與json.loads()
用于數據交換和文件操作
import json
dic={"name":"linlin"}
#轉為json字符串,序列化
data1= json.dumps(dic)
#存數據
f=open('filename','w')
f.write(data1)
f.close()
#取數據
f=open('filename','r')
#反序列化
data2=json.loads(f.read())
f.close()
json.dump()與json.load()
只適用于文件操作
import json
dic={"name":"linlin"}
#取數據
f=open('filename','w')
#序列化數據+自動存放數據
json.dumps(dic,f)
#存數據
f=open('filename','r')
#反序列化數據+自動取出數據
json.load(f)
總結
以上是生活随笔為你收集整理的python中json模块博客园_python的json模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vuecli 实战商城后台管理系统_前台
- 下一篇: python中文件读取不出来_Pytho