Python中的json對(duì)象與string相互轉(zhuǎn)換教程
首先要明確,python里有json這個(gè)庫(kù),但并沒(méi)有json這個(gè)類,所以所謂的json對(duì)象本質(zhì)上就是一個(gè)dict;而json這個(gè)庫(kù),用于實(shí)現(xiàn)dict到string、string到dict的互轉(zhuǎn)。
更具體一點(diǎn),json對(duì)象(dict)轉(zhuǎn)string用json.dumps(),string轉(zhuǎn)json對(duì)象(dict)用json.loads()。(另外dump()是json輸出到文件,load()是從文件載入成json。)
對(duì)于哪個(gè)轉(zhuǎn)哪個(gè)用哪個(gè)常弄混的問(wèn)題,可以這么理解:以json為參照點(diǎn),loads是向載入的動(dòng)作靠向json所以是string轉(zhuǎn)成json對(duì)象,所以dumps是從取出的動(dòng)作遠(yuǎn)離json所以是json對(duì)象轉(zhuǎn)成string。
一、json對(duì)象(dict)轉(zhuǎn)string
1 簡(jiǎn)單地直接轉(zhuǎn)換----使用json.dumps()
import json # 變量為dict類型,亦即所謂的json對(duì)象 json_dict = { "username": "root", "password": "toor" } # 變量為str類形,json對(duì)象轉(zhuǎn)成的字符串 # 值為'{"username": "root", "password": "toor"}' json_str = json.dumps(json_dict) # 注意如果將json_dict和json_str都使用print()直接打印出來(lái),看不出什么區(qū)別,因?yàn)樽址愋妥兞縫rint出來(lái)后最外層的引號(hào)會(huì)被脫掉 # 唯一的區(qū)別是,打印出來(lái)的json_dict鍵值都使用單引號(hào),而json_str內(nèi)層使用雙引號(hào),外層使用單引號(hào)
2 更美觀地輸出
json對(duì)象或者說(shuō)是dict類型變量是可以直接使用print()函數(shù)打印的,但只是那種所有key-value都打印在一行的形式。使用json.dumps()我們可以使用輸出成縮進(jìn)形式。
import json # 變量為dict類型,亦即所謂的json對(duì)象 json_dict = { "username": "root", "password": "toor" } # 變量為str類形,json對(duì)象轉(zhuǎn)成的字符串 # 值為'{"username": "root", "password": "toor"}' # json_str = json.dumps(json_dict) # indent是縮進(jìn)空格數(shù),這里4表示使用4空格縮進(jìn) # 值為'{\n "username": "root", \n"password": "toor"\n}' json_str = json.dumps(json_dict, indent=4) print(json_str) # 也可以直接使用json.dump()寫到文件 # with open("test.txt", "r", encoding="utf-8") as fd: # json.dump(json_dict, fd, indent=4) # logging模塊也可以這樣轉(zhuǎn)換再打印實(shí)現(xiàn)縮進(jìn)效果 # json_str = json.dumps(json_dict, indent=4) # logging.info(json_str)
二、string轉(zhuǎn)json對(duì)象(dict)
常規(guī)的string----指最外層是單引號(hào),內(nèi)層鍵值是雙引號(hào),且最后一對(duì)鍵值之后沒(méi)有逗號(hào)的字符串。如’{“username”: “root”, “password”: “toor”}'。
特殊的string----指最外層是雙引號(hào),內(nèi)層鍵值是單引號(hào),或者最一對(duì)鍵值之后有逗號(hào)的字符串。如"{‘username’: ‘root’, ‘password’: ‘toor’}"或’{“username”: “root”, “password”: “toor”,}'。
如下圖可以看到,對(duì)于特殊字符串如果強(qiáng)行使用json.loads()要將其轉(zhuǎn)換成json對(duì)象,那最外層雙引號(hào)或最后的逗號(hào)都會(huì)觸發(fā)報(bào)錯(cuò):ValueError: Expecting property name: line x column xx (char xx)
1 常規(guī)的string轉(zhuǎn)json對(duì)象(dict)----使用json.loads()
import json # 變量為str類形,待json對(duì)象的常規(guī)字符串 json_str = '{"username": "root", "password": "toor"}' # Python學(xué)習(xí)交流群:711312441 # 變量為dict類型,亦即所謂的json對(duì)象 # {'username': 'root', 'password': 'toor'} json_dict = json.loads(json_str)
2 特殊的string轉(zhuǎn)json對(duì)象(dict)----使用ast.literal_eval()
import ast # 變量為str類形,待json對(duì)象的特殊字符串 json_str = "{'username': 'root', 'password': 'toor'}" # json_str = '{"username": "root", "password": "toor",}' # json_str = "{'username': 'root', 'password': 'toor',}" # 變量為dict類型,亦即所謂的json對(duì)象 # {'username': 'root', 'password': 'toor'} json_dict = ast.literal_eval(json_str)
到此這篇關(guān)于Python中的json對(duì)象與string相互轉(zhuǎn)換教程的文章就介紹到這了,更多相關(guān)python json對(duì)象與string轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用Python代碼自動(dòng)生成文獻(xiàn)的IEEE引用格式的實(shí)現(xiàn)
這篇文章主要介紹了用Python代碼自動(dòng)生成文獻(xiàn)的IEEE引用格式的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03關(guān)于np.meshgrid函數(shù)中的indexing參數(shù)問(wèn)題
Meshgrid函數(shù)在二維與三維空間中用于生成坐標(biāo)網(wǎng)格,便于進(jìn)行圖像處理和空間數(shù)據(jù)分析,二維情況下,默認(rèn)使用笛卡爾坐標(biāo)系,而三維meshgrid則涉及不同的坐標(biāo)軸取法,在三維情況下,可能會(huì)出現(xiàn)坐標(biāo)軸排列序混亂2024-09-09python出現(xiàn)"IndentationError: unexpected indent"錯(cuò)誤解決辦法
這篇文章主要介紹了python出現(xiàn)"IndentationError: unexpected indent"錯(cuò)誤解決辦法的相關(guān)資料,希望通過(guò)本文能解決遇到這樣的問(wèn)題,需要的朋友可以參考下2017-10-10解決Python保存文件名太長(zhǎng)OSError: [Errno 36] File
這篇文章主要介紹了解決Python保存文件名太長(zhǎng)OSError: [Errno 36] File name too lon問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫(kù)
這篇文章主要為大家介紹了python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫(kù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python學(xué)習(xí)之基礎(chǔ)語(yǔ)法介紹
大家好,本篇文章主要講的是Python學(xué)習(xí)之基礎(chǔ)語(yǔ)法介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12