一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 深入理解python對json的操作總結

深入理解python對json的操作總結

2020-09-16 13:30loleina Python

Json最廣泛的應用是作為AJAX中web服務器和客戶端的通訊的數據格式,本篇文章主要介紹了python對json的操作總結,具有一定的參考價值,有興趣的可以了解一下。

Json簡介:Json,全名 JavaScript Object Notation,是一種輕量級的數據交換格式。Json最廣泛的應用是作為AJAX中web服務器和客戶端的通訊的數據格式。現在也常用于http請求中,所以對json的各種學習,是自然而然的事情。Python的官網網址:https://docs.python.org/2/library/json.html?highlight=json#module-json

Json API 使用:python在版本2.6之前,是需要先下載包,安裝后才能使用的,有點類似現在的RF內使用SeleniumLibrary一樣。但是在2.6中,官方文檔(https://docs.python.org/2.6/whatsnew/2.6.html)明顯指出,“有一些重要的新的軟件包添加到了標準庫,比如multiprocessing 和json,但是跟python 3比,2.6的這些包不會引進更多的新功能。"于是安裝python2.6以上版本的童鞋,可以不需要下載json包,直接在所需的地方就import json 即可使用,在安裝目錄下的Lib 下,看到這兩個包(點進去仔細閱讀這些源碼,會有更多的收獲,)如下文所示:

深入理解python對json的操作總結          

Python2.6 以上版本支持Json的編碼和解碼,支持python的大部分內置類型與Json進行轉換。最簡單的例子如下所示:

?
1
2
3
4
5
6
7
>>> 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對象轉換成json對象的一個過程,常用的兩個函數是dumps和dump函數。兩個函數的唯一區別就是dump把python對象轉換成json對象生成一個fp的文件流,而dumps則是生成了一個字符串:

深入理解python對json的操作總結

深入理解python對json的操作總結

其他參數的使用都是一樣的。以下是部分學習的代碼片段:

?
1
2
3
4
5
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

運行結果如下所示:

深入理解python對json的操作總結

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

深入理解python對json的操作總結

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

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

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

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

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

encoding:默認是UTF-8,設置json數據的編碼方式。

sort_keys:將數據根據keys的值進行排序。

 Decode過程,是把json對象轉換成python對象的一個過程,常用的兩個函數是loads和load函數。區別跟dump和dumps是一樣的。

?
1
2
3
4
5
6
7
8
9
10
11
12
if __name__ == '__main__':
  # 將python對象test轉換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對象轉換成python對象
  json_to_python = json.loads(python_to_json)
  print json_to_python
  print type(json_to_python)

運行結果如下:

深入理解python對json的操作總結

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

Python-->Json

深入理解python對json的操作總結

Json-->Python

深入理解python對json的操作總結

Json處理中文問題:

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# coding= utf-8
import json
import sys
 
if __name__ == '__main__':
  # 將python對象test轉換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對象轉換成python對象
  json_to_python = json.loads(python_to_json)
  print type(json_to_python)
  print json_to_python['username']

運行結果:

深入理解python對json的操作總結

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/loleina/p/5623968.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91国内精品久久久久怡红院 | 精品欧美一区二区三区四区 | 95视频在线观看在线分类h片 | 激情视频在线播放 | 国产精品1| 韩国一大片a毛片女同 | 四虎www.| 亚洲男人的天堂网 | 久久精品熟女亚洲AV国产 | 亚洲福利一区 | 幻女free性俄罗斯第一次摘花 | 欧美 亚洲 综合 卡通 另类 区 | 国产免费小视频在线观看 | 日本视频在线观看 | 毛片在线播放a | xxx86日本人 xxnx日本免费护士 | 日韩网站免费 | 国产精品久久久久久久久ktv | 国产一区二区三区福利 | 亚洲欧美日韩精品久久亚洲区 | 日本高清有码视频 | xxx黑人又大粗又长 xxxx性欧美极品另类 | 亚洲福利一区二区精品秒拍 | 96av视频在线观看 | 国产小视频在线免费观看 | 欧美二区三区 | 深夜影院深a | 福利视频一区二区三区 | 精品无码久久久久久久久 | 加勒比一本大道香蕉在线视频 | 亚洲欧美日韩一区成人 | 91久久青青草原线免费 | 日本道在线播放 | 国产美女亚洲精品久久久综合 | 我的青梅竹马是消防员2季未增删免费 | 精品久久久久久久久久久久久久久 | 国产人成激情视频在线观看 | 四虎影视入口 | 欧洲网色偷偷亚洲男人的天堂 | 四虎影院久久久 | 办公室操秘书 |