python中json操作之json.loads、json.load、json.jumps及json.jump用法_第1頁
python中json操作之json.loads、json.load、json.jumps及json.jump用法_第2頁
python中json操作之json.loads、json.load、json.jumps及json.jump用法_第3頁
python中json操作之json.loads、json.load、json.jumps及json.jump用法_第4頁
python中json操作之json.loads、json.load、json.jumps及json.jump用法_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第python中json操作之json.loads、json.load、json.jumps及json.jump用法目錄前言0.python類型與json類型互換表1.將json字符串轉(zhuǎn)化(反序列化)(1)json.loads(2)json.load延伸:如果.json文件中有注釋怎么辦2.將python對象轉(zhuǎn)化(序列化)(1)json.dumps(2)json.dump總結(jié)

前言

經(jīng)常在Python中對JSON格式的文件進(jìn)行操作,今天對這些操作做一個總結(jié)

首先,需要導(dǎo)入json庫importjson

0.python類型與json類型互換表

PythonJSONdictobjectlist,tuplearraystr,unicodestringint,long,floatnumberTruetrueFalsefalseNonenull

什么是json字符串?

相較于JSON對象,JSON字符串(可以理解為一個普通的字符串但擁有特殊的格式這種格式可以用來轉(zhuǎn)換回JSON對象)可以更加方便的在函數(shù)之間傳遞。

JSON對象中只能使用雙引號而python對象字典中可以使用單引號

1.將json字符串轉(zhuǎn)化(反序列化)

(1)json.loads

將JSON字符串轉(zhuǎn)化為Python字段的數(shù)據(jù)類型。

loads:針對內(nèi)存對象,將string轉(zhuǎn)換為dict(將string轉(zhuǎn)換為dict)

defloads(s,encoding=None,cls=None,object_hook=None,parse_float=None,

parse_int=None,parse_constant=None,object_pairs_hook=None,**kw):

"""Deserialize``s``(a``str``instancecontainingaJSON

document)toaPythonobject."""

json.loads用于解碼JSON數(shù)據(jù)。該函數(shù)返回Python字段的數(shù)據(jù)類型。

jsonData='{"\u6d4b\u8bd5":12345,"\u5185\u5bb9":["\u6211\u4e5f\u4e0d\u77e5\u9053\u6211\u8981\u5199\u4ec0\u4e48","123"]}'

print(jsonData)

print(type(jsonData))#class'str'理解為json字符串

py_type_info=json.loads(jsonData)

print(py_type_info)

print(type(py_type_info))#class'dict'

#輸出:

#{"測試":12345,"內(nèi)容":["我也不知道我要寫什么","123"]}

#class'str'

#{'測試':12345,'內(nèi)容':['我也不知道我要寫什么','123']}

#class'dict'

可以從上面輸出中看到JSON的雙引號與pythondict的單引號

(2)json.load

json.load用于讀取.json格式的文件,將JSON文件轉(zhuǎn)化成Python字段的數(shù)據(jù)類型

load:針對文件句柄,將json格式的字符轉(zhuǎn)換為dict,從文件中讀取(將string轉(zhuǎn)換為dict)

defload(fp,cls=None,object_hook=None,parse_float=None,

parse_int=None,parse_constant=None,object_pairs_hook=None,**kw):

"""Deserialize``fp``(a``.read()``-supportingfile-likeobjectcontaining

aJSONdocument)toaPythonobject."""

withopen('abc.json','r',encoding='utf-8')asf:

py_type_info=json.load(f)

print(py_type_info)

withopen(os.path.join("/home/output/compare","cmp{}.json".format(i)),"r",encoding='utf-8')asf:

cmpInfo=json.load(f)

延伸:如果.json文件中有注釋怎么辦

參考資料:Pythonh中用json.load()json.loads()加載json數(shù)據(jù)的方法

提醒:根據(jù)JSON規(guī)范(,RFC4627,RFC7159),不支持注釋。

但如果真的不幸遇到j(luò)son文件中有//類似的注釋如何解決?

defload_json(path):

importjson

lines=[]#第一步:定義一個列表,打開文件

withopen(path)asf:

forrowinf.readlines():#第二步:讀取文件內(nèi)容

ifrow.strip().startswith("http://"):#第三步:對每一行進(jìn)行過濾

continue

lines.append(row)#第四步:將過濾后的行添加到列表中.

returnjson.loads("\n".join(lines))#將列表中的每個字符串用某一個符號拼接為一整個字符串,用json.loads()函數(shù)加載,這樣就大功告成啦?。?/p>

2.將python對象轉(zhuǎn)化(序列化)

(1)json.dumps

json.dumps用于將Python對象編碼成JSON字符串。

注意:這個函數(shù)產(chǎn)生的是字符串

json.dumps(obj,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,encoding="utf-8",default=None,sort_keys=False,**kw)

obj:轉(zhuǎn)化成json的對象。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=True:默認(rèn)輸出ASCLL碼,如果把這個該成False,就可以輸出中文。check_circular:如果check_circular為false,則跳過對容器類型的循環(huán)引用檢查,循環(huán)引用將導(dǎo)致溢出錯誤(或更糟的情況)。allow_nan:如果allow_nan為假,則ValueError將序列化超出范圍的浮點值(nan、inf、-inf),嚴(yán)格遵守JSON規(guī)范,而不是使用JavaScript等價值(nan、Infinity、-Infinity)。default:default(obj)是一個函數(shù),它應(yīng)該返回一個可序列化的obj版本或引發(fā)類型錯誤。默認(rèn)值只會引發(fā)類型錯誤。sort_keys=True:是告訴編碼器按照字典排序(a到z)輸出。如果是字典類型的python對象,就把關(guān)鍵字按照字典排序。indent:參數(shù)根據(jù)數(shù)據(jù)格式縮進(jìn)顯示,讀起來更加清晰。separators:是分隔符的意思,參數(shù)意思分別為不同dict項之間的分隔符和dict項內(nèi)key和value之間的分隔符,把:和,后面的空格都除去了。

j1={'測試':12345,'內(nèi)容':['我也不知道我要寫什么','123']}

j1_str=json.dumps(j1)

print(j1)

#輸出:{'測試':12345,'內(nèi)容':['我也不知道我要寫什么','123']}

(2)json.dump

將Python對象編碼成JSON文件

j1={'測試':12345,'內(nèi)容':['我也不知道我要寫什么','123']}

withopen('abc.json'

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論