九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
python對(duì)json的操作總結(jié)
Json簡(jiǎn)介:Json,全名 JavaScript Object Notation,是一種輕量級(jí)的數(shù)據(jù)交換格式。Json最廣泛的應(yīng)用是作為AJAX中web服務(wù)器和客戶(hù)端的通訊的數(shù)據(jù)格式?,F(xiàn)在也常用于http請(qǐng)求中,所以對(duì)json的各種學(xué)習(xí),是自然而然的事情。Python的官網(wǎng)網(wǎng)址:https://docs.python.org/2/library/json.html?highlight=json#module-json
  Json API 使用:python在版本2.6之前,是需要先下載包,安裝后才能使用的,有點(diǎn)類(lèi)似現(xiàn)在的RF內(nèi)使用SeleniumLibrary一樣。但是在2.6中,官方文檔(https://docs.python.org/2.6/whatsnew/2.6.html)明顯指出,“有一些重要的新的軟件包添加到了標(biāo)準(zhǔn)庫(kù),比如multiprocessing 和json,但是跟python 3比,2.6的這些包不會(huì)引進(jìn)更多的新功能。"于是安裝python2.6以上版本的童鞋,可以不需要下載json包,直接在所需的地方就import json 即可使用,在安裝目錄下的Lib 下,看到這兩個(gè)包(點(diǎn)進(jìn)去仔細(xì)閱讀這些源碼,會(huì)有更多的收獲,)如下文所示:
  Python2.6 以上版本支持Json的編碼和解碼,支持python的大部分內(nèi)置類(lèi)型與Json進(jìn)行轉(zhuǎn)換。最簡(jiǎn)單的例子如下所示:
>>> import json>>> data = {"spam" : "foo", "parrot" : 42}>>> in_json = json.dumps(data) # Encode the data>>> in_json'{"parrot": 42, "spam": "foo"}'>>> json.loads(in_json) # Decode into a Python object{"spam" : "foo", "parrot" : 42}

  Encode過(guò)程,是把python對(duì)象轉(zhuǎn)換成json對(duì)象的一個(gè)過(guò)程,常用的兩個(gè)函數(shù)是dumps和dump函數(shù)。兩個(gè)函數(shù)的唯一區(qū)別就是dump把python對(duì)象轉(zhuǎn)換成json對(duì)象生成一個(gè)fp的文件流,而dumps則是生成了一個(gè)字符串:
  其他參數(shù)的使用都是一樣的。以下是部分學(xué)習(xí)的代碼片段:


dic1 = {'type':'dic1','username':'loleina','age':16}json_dic1 = json.dumps(dic1)print json_dic1json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="gbk",ensure_ascii=True )print json_dic2

運(yùn)行結(jié)果如下所示:


如果把實(shí)例中的key'username'的value換成中文的“測(cè)試”,則用第一次不加參數(shù)轉(zhuǎn)換則會(huì)報(bào)錯(cuò),但是用第二個(gè)加參數(shù)的就能正常運(yùn)行。

實(shí)際上就是對(duì)函數(shù)的參數(shù)的一個(gè)理解過(guò)程,下面列出幾個(gè)常用的參數(shù):

Skipkeys:默認(rèn)值是False,如果dict的keys內(nèi)的數(shù)據(jù)不是python的基本類(lèi)型(str,unicode,int,long,float,bool,None),設(shè)置為False時(shí),就會(huì)報(bào)TypeError的錯(cuò)誤。此時(shí)設(shè)置成True,則會(huì)跳過(guò)這類(lèi)key

ensure_ascii:默認(rèn)值True,如果dict內(nèi)含有non-ASCII的字符,則會(huì)類(lèi)似\uXXXX的顯示數(shù)據(jù),設(shè)置成False后,就能正常顯示

indent:應(yīng)該是一個(gè)非負(fù)的整型,如果是0,或者為空,則一行顯示數(shù)據(jù),否則會(huì)換行且按照indent的數(shù)量顯示前面的空白,這樣打印出來(lái)的json數(shù)據(jù)也叫pretty-printed json

separators:分隔符,實(shí)際上是(item_separator, dict_separator)的一個(gè)元組,默認(rèn)的就是(',',':');這表示dictionary內(nèi)keys之間用“,”隔開(kāi),而KEY和value之間用“:”隔開(kāi)。

encoding:默認(rèn)是UTF-8,設(shè)置json數(shù)據(jù)的編碼方式。

sort_keys:將數(shù)據(jù)根據(jù)keys的值進(jìn)行排序。

 Decode過(guò)程,是把json對(duì)象轉(zhuǎn)換成python對(duì)象的一個(gè)過(guò)程,常用的兩個(gè)函數(shù)是loads和load函數(shù)。區(qū)別跟dump和dumps是一樣的。


if __name__ == '__main__':    # 將python對(duì)象test轉(zhuǎn)換json對(duì)象    test = [{"username":"測(cè)試","age":16},(2,3),1]    print type(test)    python_to_json = json.dumps(test,ensure_ascii=False)    print python_to_json    print type(python_to_json)    # 將json對(duì)象轉(zhuǎn)換成python對(duì)象    json_to_python = json.loads(python_to_json)    print json_to_python    print type(json_to_python)

運(yùn)行結(jié)果如下:
 

 

 
從上面2個(gè)例子的測(cè)試結(jié)果可以看到,python的一些基本類(lèi)型通過(guò)encode之后,tuple類(lèi)型就轉(zhuǎn)成了list類(lèi)型了,再將其轉(zhuǎn)回為python對(duì)象時(shí),list類(lèi)型也并沒(méi)有轉(zhuǎn)回成tuple類(lèi)型,而且編碼格式也發(fā)生了變化,變成了Unicode編碼。具體轉(zhuǎn)化時(shí),類(lèi)型變化規(guī)則如下所示:
Python-->Json


Json-->Python


Json處理中文問(wèn)題:

    關(guān)于python字符串的處理問(wèn)題,如果深入的研究下去,我覺(jué)得可以寫(xiě)2篇文章了(實(shí)際上自己還沒(méi)整很明白),在這里主要還是總結(jié)下使用python2.7.11處理json數(shù)據(jù)的問(wèn)題。前期做接口測(cè)試,處理最多的事情就是,把數(shù)據(jù)組裝成各種協(xié)議的報(bào)文,然后發(fā)送出去。然后對(duì)返回的報(bào)文進(jìn)行解析,后面就遇到將數(shù)據(jù)封裝在json內(nèi)嵌入在http的body內(nèi)發(fā)送到web服務(wù)器,然后服務(wù)器處理完后,返回json數(shù)據(jù)結(jié)果的問(wèn)題。在這里面就需要考慮json里有中文數(shù)據(jù),怎么進(jìn)行組裝和怎么進(jìn)行解析,以下是基礎(chǔ)學(xué)習(xí)的一點(diǎn)總結(jié):

    第一:Python 2.7.11的默認(rèn)編碼格式是ascii編碼,而python3的已經(jīng)是unicode,在學(xué)習(xí)編解碼的時(shí),有出現(xiàn)亂碼的問(wèn)題,也有出現(xiàn)list或者dictionary或者tuple類(lèi)型內(nèi)的中文顯示為unicode的問(wèn)題。出現(xiàn)亂碼的時(shí)候,應(yīng)該先看下當(dāng)前字符編碼格式是什么,再看下當(dāng)前文件編碼格式是什么,或者沒(méi)有設(shè)置文件格式時(shí),查看下IDE的默認(rèn)編碼格式是什么。最推崇的方式當(dāng)然是每次編碼,都對(duì)文件編碼格式進(jìn)行指定,如在文件前 設(shè)置# coding= utf-8。

   第二:字符串在Python內(nèi)部的表示是unicode編碼,因此,在做編碼轉(zhuǎn)換時(shí),通常需要以u(píng)nicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再?gòu)膗nicode編碼(encode)成另一種編碼。decode的作用是將其他編碼的字符串轉(zhuǎn)換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉(zhuǎn)換成unicode編碼。encode的作用是將unicode編碼轉(zhuǎn)換成其他編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉(zhuǎn)換成gb2312編碼。因此,轉(zhuǎn)碼的時(shí)候一定要先搞明白,字符串str是什么編碼,然后decode成unicode,然后再encode成其他編碼

   第三:將json數(shù)據(jù)轉(zhuǎn)換成python數(shù)據(jù)后,一般會(huì)得到一個(gè)dict類(lèi)型的變量,此時(shí)內(nèi)部的數(shù)據(jù)都是unicode編碼,所以中文的顯示看著很痛苦,但是對(duì)于dict得到每個(gè)key的value后,中文就能正常顯示了,如下所示:


# coding= utf-8import jsonimport sysif __name__ == '__main__':    # 將python對(duì)象test轉(zhuǎn)換json對(duì)象    test = {"username":"測(cè)試","age":16}    print type(test)    python_to_json = json.dumps(test,ensure_ascii=False)    print python_to_json    print type(python_to_json)    # 將json對(duì)象轉(zhuǎn)換成python對(duì)象    json_to_python = json.loads(python_to_json)    print type(json_to_python)    print json_to_python['username']
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
「黑知識(shí)」分享幾個(gè) Python 編程小技巧,你還知道那些?歡迎補(bǔ)充
什么是JSON?
Python JSON 
[Python]Python中文全攻略
Python中文編碼問(wèn)題
Python中Json和dict區(qū)別對(duì)比?入門(mén)分享!
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服