剛開(kāi)始接觸json的操作,我主要有下面幾個(gè)疑問(wèn):
json操作需要什么庫(kù)?
如何將python對(duì)象轉(zhuǎn)換成JSON字符串,更進(jìn)一步,能不能直接轉(zhuǎn)換成文件句柄存儲(chǔ)到文件中?(編碼)
如何將json字符串轉(zhuǎn)換成python對(duì)象,更進(jìn)一步,能不能直接將JSON格式的文件轉(zhuǎn)換成python對(duì)象?(解碼)
下面就讓我們一一來(lái)探索這些問(wèn)題。
json操作需要什么庫(kù)?
使用json函數(shù)前需要先導(dǎo)入json庫(kù):
importjson
json庫(kù)本身就是python內(nèi)置的標(biāo)準(zhǔn)庫(kù),因此你不需要做任何安裝的操作。只要聲明了上面語(yǔ)句,就可直接使用。
如何將python編碼成JSON?
python編碼為JSON的對(duì)照表
要完成這個(gè)功能,先要看下python數(shù)據(jù)結(jié)構(gòu)編碼為json的對(duì)照表。
PythonJSON
dictobject
list,tuplearray
strstring
int,float,int-&float-derivedEnumsnumber
Truetrue
Falsefalse
Nonenull
有了這張表,我們就可以清楚的知道python對(duì)象將編碼成的json格式。
json.dumps()
json.dumps()方法的作用就是將python對(duì)象轉(zhuǎn)換成JSON字符串,下面來(lái)看具體的函數(shù)聲明:
json.dumps(obj,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding="utf-8",default=None,sort_keys=False,**kw)
參數(shù)看起來(lái)好多啊,不過(guò)不用擔(dān)心,這么多參數(shù),只有第一個(gè)參數(shù)是必填的。下面就來(lái)一一了解下這些參數(shù)的意義
obj就是要編碼的python對(duì)象
skipkeys默認(rèn)值是False。設(shè)置為True,假如obj中的dictkeys不是基本類型(str,int,float,bool,None),就會(huì)被忽略,而不是拋出TypeError錯(cuò)誤
ensure_ascii默認(rèn)是True,表示默認(rèn)使用ascii編碼。如果obj內(nèi)含有非ASCII字符,就會(huì)出現(xiàn)"\uXXXX"格式顯式的數(shù)據(jù),設(shè)置成False就會(huì)使用字符本來(lái)的編碼。
這里要注意,如果輸入是中文,需要指定ensure_ascii=False
check_circular默認(rèn)值是True,如果設(shè)置為False就不會(huì)檢查內(nèi)部類型是否包含循環(huán)引用,而且循環(huán)引用會(huì)導(dǎo)致OverflowError
allow_nan默認(rèn)值為False,如果碰到超過(guò)范圍的float值(nan,inf,-inf)就使用(NaN,Infinity,-Infinity)替換
如果為True碰到這些值則會(huì)導(dǎo)致ValueError
indent縮進(jìn)設(shè)置
如果是非負(fù)整數(shù)或者string,JSONArray元素和對(duì)象元素將會(huì)按照設(shè)置的縮進(jìn)格式化顯示
值為0,負(fù)值,或者""只會(huì)插入新的一行
值為None(也是默認(rèn)值)會(huì)盡可能的壓縮
separators分隔符。
如果要設(shè)置它,參數(shù)需要是一個(gè)元組(item_separator,key_separator)
默認(rèn)值是(',',':'),表示keys之間用,隔開(kāi),而key和value之間用:隔開(kāi)
sort_keys默認(rèn)值是False,如果設(shè)置成True,dict結(jié)構(gòu)的輸出就會(huì)按照key來(lái)排序
encoding默認(rèn)值是UTF-8用于設(shè)置JSON數(shù)據(jù)的編碼方式,在處理中文時(shí)這里一定要注意。
來(lái)看一個(gè)例子
>>>importjson
>>>json.dumps(['foo',{'bar':('baz',None,1.0,2)}])
'["foo",{"bar":["baz",null,1.0,2]}]'
>>>print(json.dumps("\"foo\bar"))
"\"foo\bar"
>>>print(json.dumps('\u1234'))
"\u1234"
>>>print(json.dumps('\\'))
"\\"
>>>print(json.dumps({"c":0,"b":0,"a":0},sort_keys=True))
{"a":0,"b":0,"c":0}
json.dump()
json.dump()函數(shù)的作用就是將python對(duì)象轉(zhuǎn)換成JSON字符串,并將其通過(guò)fp文件流寫入到文件中。來(lái)看下具體的函數(shù)聲明:
json.dump(obj,fp,*,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,default=None,sort_keys=False,**kw)
和前面的dumps函數(shù)進(jìn)行比較,會(huì)發(fā)現(xiàn)兩個(gè)函數(shù)的參數(shù)是非常相似的,而且它們的意義也都相同。來(lái)看下面的例子
>>>importjson
>>>fromioimportStringIO
>>>io=StringIO()
>>>json.dump(['streamingAPI'],io)
>>>io.getvalue()
'["streamingAPI"]'
以上內(nèi)容為大家介紹了Python中常用的json操作有哪些?,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。