日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)JSON教程:在 Python3 中使用 JSON

本教程將會(huì)教我們?nèi)绾问褂?nbsp;Python 編程語(yǔ)言編碼和解碼 JSON。

成都創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元靖西做網(wǎng)站,已為上家服務(wù),為靖西各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

環(huán)境

在python3中(以及python2.6版本后的python2版本)內(nèi)置了JSON模塊,無(wú)需額外安裝另外的JSON模塊。

簡(jiǎn)介

JSON模塊是python內(nèi)置的用來(lái)進(jìn)行python對(duì)象序列化和反序列化的模塊。

 序列化,指將python對(duì)象轉(zhuǎn)換為json格式的數(shù)據(jù)流,反序列化則是將json格式的數(shù)據(jù)流轉(zhuǎn)換為python對(duì)象。

該模塊中常用的方法有以下四個(gè):

  • ?json.dump?  將Python對(duì)象序列化為Json格式的數(shù)據(jù)流并寫入文件類型的對(duì)象中
  • ?json.dumps?  將Python對(duì)象序列化為Json格式的字符串
  • ?json.load?  從文件類型的對(duì)象中讀取Json格式的數(shù)據(jù)并反序列化成Python對(duì)象
  • ?json.loads ? 將包含Json格式數(shù)據(jù)的字符串反序列化成Python對(duì)象

 兩個(gè)dump函數(shù)是將python對(duì)象轉(zhuǎn)換為json,可以理解為編碼(類似demjson的encode函數(shù)),兩個(gè)load函數(shù)是將json轉(zhuǎn)換為python對(duì)象,可以理解為JSON解析(類似demjson的code函數(shù))。因?yàn)閮蓚€(gè)dump和兩個(gè)load的功能相似,所以小編只介紹其中一個(gè)(介紹JSON格式數(shù)據(jù)的字符串的編碼與解析,也就是dumps和loads函數(shù))。

json.dumps()

dumps可以傳遞的參數(shù)如下:

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參數(shù)(這是一個(gè)對(duì)象),其他參數(shù)為可選參數(shù),下表是該函數(shù)的所有參數(shù)的作用:

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

如果該參數(shù)為True,則將字符串中的非ascii字符轉(zhuǎn)義成unicode字符串,否則,將不會(huì)進(jìn)行轉(zhuǎn)義。

 ?check_circular=True? 是否進(jìn)行容器類型的循環(huán)引用檢查。

如果該參數(shù)設(shè)置為False,則不進(jìn)行檢查,但是可能會(huì)引發(fā) OverflowError或更嚴(yán)重的情況。

如果該參數(shù)設(shè)置為True,則將進(jìn)行容器類型的循環(huán)引用檢查,并在發(fā)現(xiàn)循環(huán)引用時(shí)拋出異常。

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

如果該參數(shù)設(shè)置為True,則上面列出的那些值將依次使用JavaScript中等價(jià)的值( Infinity、-Infinity、 NaN)來(lái)進(jìn) 行替代;

如果該參數(shù)設(shè)置為False,并且要序列化的對(duì)象中出現(xiàn)了那些超出范圍的值,則將引發(fā)ValueError異常。

 ?indent=None? 是否在數(shù)組元素和對(duì)象成員前增加縮進(jìn)以便使格式更加美觀。

如果該參數(shù)設(shè)置為大于等于1的整數(shù),則添加換行符和對(duì)應(yīng)數(shù)量的空格表示縮進(jìn),如果設(shè)置為0,則表示只添加換行符,如果設(shè)置為 None,則表示無(wú)縮進(jìn)。

 ?separators=None? 設(shè)置Json中各項(xiàng)之間、對(duì)象的鍵和值之間的分隔符;

該參數(shù)必須是一個(gè)2元組,元組第一個(gè)元素表示Json數(shù)據(jù)中各項(xiàng)之間的分隔符,元組的第二個(gè)元素表示Json對(duì)象的鍵和值之間的分隔符。默認(rèn)的分隔符為(’,’, ‘:’)

 ?default=None? 指定一個(gè)函數(shù),用來(lái)將不可進(jìn)行序列化的Python對(duì)象轉(zhuǎn)化為可序列化的Python對(duì)象。
? cls=None? 指定一個(gè)定制的JSONEncoder 的子類(例如,重寫了.default() 方法用來(lái)序列化附加的類型),指定該參數(shù)時(shí)請(qǐng)使用cls 關(guān)鍵字參數(shù)。如果未指定該參數(shù),則將使用默認(rèn)的JSONEncoder 。
? sort_keys=False? 是否要將對(duì)象中字典元素按照key進(jìn)行排序。

默認(rèn)為False,即不進(jìn)行排序,若指定為 True,則會(huì)進(jìn)行排序。

舉個(gè)簡(jiǎn)單的例子:

#!/usr/bin/python3
import json
# Python 字典類型轉(zhuǎn)換為 JSON 對(duì)象
data = {
    'no' : 1,
    'name' : 'W3CSchool',
    'url' : 'http://www.cdcxhl.com'
}
json_str = json.dumps(data)
print ("Python 原始數(shù)據(jù):", repr(data))
print ("JSON 對(duì)象:", json_str)

python對(duì)象轉(zhuǎn)化為JSON字符串的時(shí)候遵循以下轉(zhuǎn)換規(guī)則:

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

json.loads()

loads可以傳遞的參數(shù)如下:

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

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

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

接受一個(gè)可調(diào)用對(duì)象,用于處理解碼后生成的Python對(duì)象中?dict?類型的值。

注意,這個(gè)處理過(guò)程是遞歸進(jìn)行的,即返回的Python對(duì)象內(nèi)部所有的字典結(jié)構(gòu)都將被這個(gè)方法處理

? parse_float=None?

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

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

舉個(gè)簡(jiǎn)單的例子:

#!/usr/bin/python3
import json
# Python 字典類型轉(zhuǎn)換為 JSON 對(duì)象
data1 = {
    'no' : 1,
    'name' : 'W3CSchool',
    'url' : 'http://www.cdcxhl.com'
}

json_str = json.dumps(data1)
print ("Python 原始數(shù)據(jù):", repr(data1))
print ("JSON 對(duì)象:", json_str)

# 將 JSON 對(duì)象轉(zhuǎn)換為 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])

與序列化的過(guò)程類似,JSON轉(zhuǎn)化為python對(duì)象也遵循一定的規(guī)則:

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


網(wǎng)頁(yè)名稱:創(chuàng)新互聯(lián)JSON教程:在 Python3 中使用 JSON
鏈接分享:http://www.5511xx.com/article/dpihcps.html