91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么解析JSON

發布時間:2022-01-26 09:46:04 來源:億速云 閱讀:166 作者:iii 欄目:開發技術

這篇“python怎么解析JSON”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python怎么解析JSON”文章吧。

簡介

JSON模塊是python內置的用來進行python對象序列化和反序列化的模塊。

 序列化,指將python對象轉換為json格式的數據流,反序列化則是將json格式的數據流轉換為python對象。

該模塊中常用的方法有以下四個:

  • json.dump  將Python對象序列化為Json格式的數據流并寫入文件類型的對象中

  • json.dumps  將Python對象序列化為Json格式的字符串

  • json.load  從文件類型的對象中讀取Json格式的數據并反序列化成Python對象

  • json.loads  將包含Json格式數據的字符串反序列化成Python對象

 兩個dump函數是將python對象轉換為json,可以理解為編碼(類似demjson的encode函數),兩個load函數是將json轉換為python對象,可以理解為JSON解析(類似demjson的code函數)。因為兩個dump和兩個load的功能相似,所以小編只介紹其中一個(介紹JSON格式數據的字符串的編碼與解析,也就是dumps和loads函數)。

json.dumps()

dumps可以傳遞的參數如下:

json.dumps(obj,  skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False)

在日常使用中,更多的情況我們只傳遞必須的obj參數(這是一個對象),其他參數為可選參數,下表是該函數的所有參數的作用:

 參數 作用
 obj(必選項) 要序列化的python對象
 skipkeys=False 是否跳過要序列化的對象中字典元素的key不是基本類型的數據;
如果為True,則跳過,如果為False,將拋出TypeError異常。
 ensure_ascii=True 是否將要序列化的對象中的字符串中的非ascii字符進行轉義。

如果該參數為True,則將字符串中的非ascii字符轉義成unicode字符串,否則,將不會進行轉義。

 check_circular=True 是否進行容器類型的循環引用檢查。

如果該參數設置為False,則不進行檢查,但是可能會引發OverflowError或更嚴重的情況。

如果該參數設置為True,則將進行容器類型的循環引用檢查,并在發現循環引用時拋出異常。

 allow_nan=True 是否允許序列化超出范圍的float類型的值(如float('inf')float('-inf')float('nan'))。

如果該參數設置為True,則上面列出的那些值將依次使用JavaScript中等價的值(Infinity-InfinityNaN)來進 行替代;

如果該參數設置為False,并且要序列化的對象中出現了那些超出范圍的值,則將引發ValueError異常。

 indent=None 是否在數組元素和對象成員前增加縮進以便使格式更加美觀。

如果該參數設置為大于等于1的整數,則添加換行符和對應數量的空格表示縮進,如果設置為0,則表示只添加換行符,如果設置為None,則表示無縮進。

 separators=None 設置Json中各項之間、對象的鍵和值之間的分隔符;

該參數必須是一個2元組,元組第一個元素表示Json數據中各項之間的分隔符,元組的第二個元素表示Json對象的鍵和值之間的分隔符。默認的分隔符為(’,’, ‘:’)

 default=None 指定一個函數,用來將不可進行序列化的Python對象轉化為可序列化的Python對象。
 cls=None 指定一個定制的JSONEncoder的子類(例如,重寫了.default()方法用來序列化附加的類型),指定該參數時請使用cls關鍵字參數。如果未指定該參數,則將使用默認的JSONEncoder
 sort_keys=False 是否要將對象中字典元素按照key進行排序。

默認為False,即不進行排序,若指定為True,則會進行排序。

舉個簡單的例子(以下是小編在某篇文章中的例子,里面就用到了json.dumps方法):

from flask import Flask
import json

app = Flask(__name__)


@app.route('/hello')  # 規定url,當請求的url為/hello時執行注解下的函數
def hello_world():
    data = {
        'no': 1,
        'name': 'W3CSchool',
        'url': 'http://www.neiyidaogou.com'
    }
    # 在python中,與json對應的數據格式是字典,所以我們這邊創建一個字典用來存儲數據與返回
    print(type(data))
    # 打印,確定數據類型是字典

    json_str = json.dumps(data)
    # 使用dumps將字典類型轉換為字符串,這樣才能通過http協議返回
    # json在傳輸時是以字符串進行傳輸的
    return json_str  # 使用flask,可以直接用return返回這個字符串,即可將json返回


if __name__ == '__main__':
    app.run() # 運行這個flask項目

python對象轉化為JSON字符串的時候遵循以下轉換規則:

PythonJson
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

json.loads()

loads可以傳遞的參數如下:

json.loads(s,encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None)

在日常使用中,更多的情況我們只傳遞必須的s參數(這是一個字符串),其他參數為可選參數,下表是該函數的所有參數的作用:

 參數 作用
 s(必選項) 要反序列化的JSON字符串
encoding=None
 該參數已棄用,將會被忽略
cls=None
 指定一個定制的JsonDecoder子類,以便實現特定的反序列化需求;
object_hook=None

接受一個可調用對象,用于處理解碼后生成的Python對象中dict類型的值。

注意,這個處理過程是遞歸進行的,即返回的Python對象內部所有的字典結構都將被這個方法處理

 parse_float=None

用于處理解碼后的Python對象中的float類型的值。

 parse_int=None 接受一個可調用對象,用于處理解碼后的Python對象中的int類型的值。
 parse_constant=None接受一個可調用對象,用于解碼時對Infinity-InfinityNaN或其他非法的Json數值的處理。
 object_parse_hook=None 如果指定了該參數并且設置為一個可調用對象,那么Json對象將被解碼成一個元素為二元組的列表,二元組的兩個元素分別為Json對象中的鍵值對的鍵和值,并且列表中元素的順序與Json對象中鍵值對的順序一致。

舉個簡單的例子(以下是小編在某篇文章中的例子,里面就用到了json.loads方法,而且剛好和上一篇文章是姊妹篇,不過雖然是姊妹篇,但并不是同一個項目,也就是說JSON數據不是找上一個項目請求的):

import requests
import json

response = requests.get('http://www.kuaidi100.com/query?type=ems&postid=111111111111')
# 使用request請求一個json,這里的快遞單號是小編隨便編寫的
print(response)
print(type(response))
# 打印后發現這是一個對象
response = response.text
# 使用requests的的text方法取出響應的文本
print(response)
print(type(response))
# 打印后發現是個字符串(JSON在傳輸的時候是以字符串進行傳輸的)
response = json.loads(response)
# 使用JSON模塊的loads方法,可以將這個字符串進行編碼,
print(response)
print(type(response))
# 打印結果,發現是字典(JSON對應JavaScript的對象,對應python的字典,對應java的map)
response = json.dumps(response)
# 使用JSON的的dumps方法,可以把字典轉化為字符串(JSON的傳輸是以字符串傳輸的,)
print(response)
print(type(response))

與序列化的過程類似,JSON轉化為python對象也遵循一定的規則:

JsonPython
objectdict
arraylist
stringstr
number(int)int
number(real)float
trueTrue
falseFalse
nullNone

以上就是關于“python怎么解析JSON”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

冕宁县| 屯留县| 鱼台县| 张家口市| 三门县| 旺苍县| 台北县| 舒兰市| 和田市| 神池县| 九龙城区| 婺源县| 牙克石市| 民县| 枞阳县| 颍上县| 扶风县| 兴安盟| 天台县| 钦州市| 赫章县| 祥云县| 奎屯市| 乐东| 阜康市| 晋宁县| 错那县| 会同县| 龙海市| 托克托县| 温泉县| 万盛区| 虎林市| 静宁县| 宁德市| 民乐县| 泰顺县| 得荣县| 崇义县| 通河县| 乌苏市|