欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解python對json的操作總結(jié)

 更新時間:2017年01月05日 15:02:00   作者:loleina  
Json最廣泛的應(yīng)用是作為AJAX中web服務(wù)器和客戶端的通訊的數(shù)據(jù)格式,本篇文章主要介紹了python對json的操作總結(jié),具有一定的參考價值,有興趣的可以了解一下。

Json簡介:Json,全名 JavaScript Object Notation,是一種輕量級的數(shù)據(jù)交換格式。Json最廣泛的應(yīng)用是作為AJAX中web服務(wù)器和客戶端的通訊的數(shù)據(jù)格式?,F(xiàn)在也常用于http請求中,所以對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之前,是需要先下載包,安裝后才能使用的,有點類似現(xiàn)在的RF內(nèi)使用SeleniumLibrary一樣。但是在2.6中,官方文檔(https://docs.python.org/2.6/whatsnew/2.6.html)明顯指出,“有一些重要的新的軟件包添加到了標(biāo)準(zhǔn)庫,比如multiprocessing 和json,但是跟python 3比,2.6的這些包不會引進(jìn)更多的新功能。"于是安裝python2.6以上版本的童鞋,可以不需要下載json包,直接在所需的地方就import json 即可使用,在安裝目錄下的Lib 下,看到這兩個包(點進(jìn)去仔細(xì)閱讀這些源碼,會有更多的收獲,)如下文所示:

          

Python2.6 以上版本支持Json的編碼和解碼,支持python的大部分內(nèi)置類型與Json進(jìn)行轉(zhuǎ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過程,是把python對象轉(zhuǎn)換成json對象的一個過程,常用的兩個函數(shù)是dumps和dump函數(shù)。兩個函數(shù)的唯一區(qū)別就是dump把python對象轉(zhuǎn)換成json對象生成一個fp的文件流,而dumps則是生成了一個字符串:

其他參數(shù)的使用都是一樣的。以下是部分學(xué)習(xí)的代碼片段:

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

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

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

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

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

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

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

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

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

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

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

if __name__ == '__main__':
  # 將python對象test轉(zhuǎn)換json對象
  test = [{"username":"測試","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對象轉(zhuǎn)換成python對象
  json_to_python = json.loads(python_to_json)
  print json_to_python
  print type(json_to_python)

運行結(jié)果如下:

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

Python-->Json

Json-->Python

Json處理中文問題:

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

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

第二:字符串在Python內(nèi)部的表示是unicode編碼,因此,在做編碼轉(zhuǎn)換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(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)碼的時候一定要先搞明白,字符串str是什么編碼,然后decode成unicode,然后再encode成其他編碼

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

# coding= utf-8
import json
import sys

if __name__ == '__main__':
  # 將python對象test轉(zhuǎn)換json對象
  test = {"username":"測試","age":16}
  print type(test)
  python_to_json = json.dumps(test,ensure_ascii=False)
  print python_to_json
  print type(python_to_json)

  # 將json對象轉(zhuǎn)換成python對象
  json_to_python = json.loads(python_to_json)
  print type(json_to_python)
  print json_to_python['username']

運行結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flask 入門系列 Cookie與session的介紹

    Flask 入門系列 Cookie與session的介紹

    這篇文章主要給大家分享的是 Flask 入門系列 Cookie與session的介紹,下面文字圍繞 Cookie與session的相關(guān)資料展開詳情,需要的朋友可以參考一下,希望對大家有所幫助
    2021-11-11
  • Python接收手機短信的代碼整理

    Python接收手機短信的代碼整理

    在本篇文章里小編給大家整理的是一篇關(guān)于Python接收手機短信的代碼內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-08-08
  • 詳解python??OpenCV如何使用背景分離方法

    詳解python??OpenCV如何使用背景分離方法

    這篇文章主要為大家介紹了python?OpenCV如何使用背景分離方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Python使用matplotlib繪制隨機漫步圖

    Python使用matplotlib繪制隨機漫步圖

    這篇文章主要為大家詳細(xì)介紹了使用Python生成隨機漫步數(shù)據(jù),使用matplotlib繪制隨機漫步圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python實現(xiàn)初始化不同的變量類型為空值

    Python實現(xiàn)初始化不同的變量類型為空值

    這篇文章主要介紹了Python實現(xiàn)初始化不同的變量類型為空值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python爬蟲之selenium庫的安裝及使用教程

    python爬蟲之selenium庫的安裝及使用教程

    今天帶大家來學(xué)習(xí)怎么安裝使用selenium庫,文中有非常詳細(xì)的圖文介紹,對正在學(xué)習(xí)python爬蟲的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Python中type()函數(shù)的具體使用

    Python中type()函數(shù)的具體使用

    在Python中,type()函數(shù)是一個非常有用的工具,它可以查看變量或?qū)ο蟮臄?shù)據(jù)類型,本文主要介紹了Python中type()函數(shù)的具體使用,感興趣的可以一起來了解一下
    2024-01-01
  • python讀取注冊表中值的方法

    python讀取注冊表中值的方法

    在Python的標(biāo)準(zhǔn)庫中,_winreg.pyd可以操作Windows的注冊表,另外第三方的win32庫封裝了大量的Windows API,使用起來也很方便。不過這里介紹的是使用_winreg操作注冊表,畢竟是Python自帶的標(biāo)準(zhǔn)庫,無需安裝第三方庫
    2013-04-04
  • Python scrapy增量爬取實例及實現(xiàn)過程解析

    Python scrapy增量爬取實例及實現(xiàn)過程解析

    這篇文章主要介紹了Python scrapy增量爬取實例及實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 在雙python下設(shè)置python3為默認(rèn)的方法

    在雙python下設(shè)置python3為默認(rèn)的方法

    這篇文章主要介紹了如何在雙python下設(shè)置python3為默認(rèn),本文通過一個例子分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10

最新評論