最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python json 模塊核心用法之字典 / 列表與 JSON 字符串互轉(zhuǎn)的操作

 更新時(shí)間:2026年02月09日 15:33:49   作者:可可鴨~  
在Python開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到Python內(nèi)置數(shù)據(jù)類型(字典、列表)和JSON字符串的相互轉(zhuǎn)換需求,本文會(huì)通過(guò)實(shí)際代碼案例,詳細(xì)講解json模塊的兩個(gè)核心方法,感興趣的朋友跟隨小編一起看看吧

在Python開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到Python內(nèi)置數(shù)據(jù)類型(字典、列表)JSON字符串的相互轉(zhuǎn)換需求——比如接口數(shù)據(jù)交互、配置文件讀寫(xiě)、跨語(yǔ)言數(shù)據(jù)傳遞等場(chǎng)景,而Python內(nèi)置的json模塊就是專門解決這個(gè)問(wèn)題的工具,無(wú)需額外安裝,直接導(dǎo)入即可使用。

本文會(huì)通過(guò)實(shí)際代碼案例,詳細(xì)講解json模塊的兩個(gè)核心方法:json.dumps()(Python對(duì)象轉(zhuǎn)JSON字符串)和json.loads()(JSON字符串轉(zhuǎn)Python對(duì)象),同時(shí)對(duì)比新手易混淆的str()轉(zhuǎn)換,以及講解使用過(guò)程中的中文顯示常見(jiàn)報(bào)錯(cuò)問(wèn)題,讓你徹底掌握基礎(chǔ)用法。

一、先明確兩個(gè)核心概念

  • Python對(duì)象:本文主要指字典(dict)列表(list)(列表內(nèi)嵌套字典是最常見(jiàn)的接口數(shù)據(jù)格式),是Python程序內(nèi)部使用的數(shù)據(jù)類型。
  • JSON字符串:符合JSON語(yǔ)法規(guī)范的字符串,是跨平臺(tái)/跨語(yǔ)言的通用數(shù)據(jù)格式,語(yǔ)法要求鍵值對(duì)必須用雙引號(hào),而Python字典支持單/雙引號(hào),這是核心區(qū)別。
  • json模塊的核心作用:實(shí)現(xiàn)Python對(duì)象和JSON字符串的雙向序列化/反序列化,而非簡(jiǎn)單的字符串轉(zhuǎn)換。

二、核心方法1:json.dumps() —— Python對(duì)象轉(zhuǎn)JSON字符串

json.dumps()的作用是將Python字典/列表序列化為標(biāo)準(zhǔn)JSON字符串,語(yǔ)法格式:

json.dumps(python_obj, ensure_ascii=False, indent=None, ...)

關(guān)鍵參數(shù)ensure_ascii=False,默認(rèn)值為True,若不設(shè)置,中文會(huì)被轉(zhuǎn)成\uXXX格式的Unicode編碼,設(shè)置后可正常顯示中文,這是開(kāi)發(fā)中必設(shè)的參數(shù)。

我們通過(guò)單個(gè)字典字典嵌套列表兩種最常見(jiàn)的場(chǎng)景,對(duì)比str()(簡(jiǎn)單字符串轉(zhuǎn)換)和json.dumps()(標(biāo)準(zhǔn)JSON轉(zhuǎn)換)的區(qū)別。

場(chǎng)景1:?jiǎn)蝹€(gè)Python字典轉(zhuǎn)字符串/JSON字符串

代碼示例:

import json  # 導(dǎo)入內(nèi)置json模塊,無(wú)需額外安裝
# 定義一個(gè)Python字典對(duì)象
d = {
    "name":"張三"
}
# 方式1:用str()做簡(jiǎn)單的字符串轉(zhuǎn)換
print(str(d))
# 方式2:用json.dumps()轉(zhuǎn)標(biāo)準(zhǔn)JSON字符串,設(shè)置ensure_ascii=False顯示中文
s = json.dumps(d, ensure_ascii=False)
print(s)

運(yùn)行結(jié)果

{'name': '張三'}
{"name": "張三"}

結(jié)果分析

  • str(d):只是將Python字典直接轉(zhuǎn)為普通字符串,保留了Python的語(yǔ)法特征——鍵值對(duì)用單引號(hào),這并不是標(biāo)準(zhǔn)的JSON字符串,其他語(yǔ)言/工具無(wú)法識(shí)別。
  • json.dumps(d, ensure_ascii=False):生成標(biāo)準(zhǔn)JSON字符串,鍵值對(duì)用雙引號(hào)(符合JSON語(yǔ)法規(guī)范),且中文正常顯示,是開(kāi)發(fā)中的正確用法。

場(chǎng)景2:字典嵌套列表轉(zhuǎn)字符串/JSON字符串

這是接口返回?cái)?shù)據(jù)最常見(jiàn)的格式(多個(gè)對(duì)象的集合),代碼示例:

# 定義一個(gè)Python列表,內(nèi)部嵌套兩個(gè)字典
d2 = [{
    "name":"張三"
},{
    "name":"旺旺"
}]
# 方式1:str()簡(jiǎn)單轉(zhuǎn)換
print(str(d2))
# 方式2:json.dumps()轉(zhuǎn)標(biāo)準(zhǔn)JSON字符串
ds = json.dumps(d2, ensure_ascii=False)
print(ds)

運(yùn)行結(jié)果

[{'name': '張三'}, {'name': '旺旺'}]
[{"name": "張三"}, {"name": "旺旺"}]

結(jié)果分析

和單個(gè)字典的規(guī)律一致,str(d2)生成的是Python列表的字符串表示(單引號(hào)),而json.dumps()生成的是標(biāo)準(zhǔn)JSON數(shù)組字符串(雙引號(hào)),可直接被前端、其他語(yǔ)言解析,這也是實(shí)際開(kāi)發(fā)中唯一推薦的轉(zhuǎn)換方式。

三、核心方法2:json.loads() —— JSON字符串轉(zhuǎn)Python對(duì)象

json.loads()的作用是將標(biāo)準(zhǔn)JSON字符串反序列化為Python字典/列表,語(yǔ)法格式:

json.loads(json_str)

核心注意點(diǎn):該方法僅接收J(rèn)SON格式的字符串作為參數(shù),不能直接傳入Python字典/列表,否則會(huì)直接報(bào)錯(cuò)(新手最容易踩的坑)。

先看原代碼的問(wèn)題(新手必避坑)

原代碼中這部分寫(xiě)法存在語(yǔ)法錯(cuò)誤,運(yùn)行后會(huì)直接拋出TypeError,我們先看錯(cuò)誤代碼:

# 錯(cuò)誤示例:直接將Python字典/列表傳入json.loads()
rp = {"name": "張三"}  # 這是Python字典,不是JSON字符串
rpj = [{"name": "張三"}, {"name": "旺旺"}]  # 這是Python列表,不是JSON字符串
res_dict = json.loads(rp)  # 報(bào)錯(cuò)!參數(shù)不是字符串
res_list = json.loads(rpj)  # 報(bào)錯(cuò)!參數(shù)不是字符串

報(bào)錯(cuò)原因json.loads()的入?yún)⒈仨毷?strong>字符串類型,而rp是字典、rpj是列表,類型不匹配,程序無(wú)法解析。

正確用法:先轉(zhuǎn)JSON字符串,再反序列化

想要實(shí)現(xiàn)“Python對(duì)象→JSON字符串→Python對(duì)象”的完整流程,需先通過(guò)json.dumps()生成JSON字符串,再通過(guò)json.loads()轉(zhuǎn)回Python對(duì)象,代碼示例:

import json
# 1. 定義原始Python對(duì)象
rp = {"name": "張三"}  # 字典
rpj = [{"name": "張三"}, {"name": "旺旺"}]  # 列表嵌套字典
# 2. 先通過(guò)dumps()轉(zhuǎn)為標(biāo)準(zhǔn)JSON字符串
rp_json = json.dumps(rp, ensure_ascii=False)
rpj_json = json.dumps(rpj, ensure_ascii=False)
print("JSON字符串rp_json:", rp_json, type(rp_json))
print("JSON字符串rpj_json:", rpj_json, type(rpj_json))
# 3. 再通過(guò)loads()轉(zhuǎn)回Python對(duì)象
res_dict = json.loads(rp_json)
res_list = json.loads(rpj_json)
print("轉(zhuǎn)回Python字典:", res_dict, type(res_dict))
print("轉(zhuǎn)回Python列表:", res_list, type(res_list))

運(yùn)行結(jié)果

JSON字符串rp_json: {"name": "張三"} <class 'str'>
JSON字符串rpj_json: [{"name": "張三"}, {"name": "旺旺"}] <class 'str'>
轉(zhuǎn)回Python字典: {'name': '張三'} <class 'dict'>
轉(zhuǎn)回Python列表: [{'name': '張三'}, {'name': '旺旺'}] <class 'list'>

結(jié)果分析

  • json.dumps()將Python字典/列表轉(zhuǎn)為str類型的JSON字符串;
  • json.loads()根據(jù)JSON字符串的格式,自動(dòng)還原為對(duì)應(yīng)的Python類型——JSON對(duì)象→Python字典,JSON數(shù)組→Python列表。

四、本文核心知識(shí)點(diǎn)總結(jié)

  • json模塊的兩個(gè)核心方法
    • json.dumps(python_obj, ensure_ascii=False):Python字典/列表 → 標(biāo)準(zhǔn)JSON字符串,ensure_ascii=False是中文正常顯示的關(guān)鍵;
    • json.loads(json_str):標(biāo)準(zhǔn)JSON字符串 → Python字典/列表,入?yún)⒈仨毷?strong>字符串類型。
  • str()和json.dumps()的本質(zhì)區(qū)別
    • str():僅做簡(jiǎn)單的類型轉(zhuǎn)換,保留Python語(yǔ)法特征(單引號(hào)),生成的不是標(biāo)準(zhǔn)JSON字符串;
    • json.dumps():做序列化轉(zhuǎn)換,生成符合JSON語(yǔ)法的字符串(雙引號(hào)),可跨平臺(tái)/跨語(yǔ)言解析。
  • JSON和Python對(duì)象的語(yǔ)法差異
    • JSON:鍵值對(duì)必須用雙引號(hào),數(shù)組/對(duì)象嵌套格式嚴(yán)格;
    • Python字典/列表:鍵值對(duì)支持單/雙引號(hào),語(yǔ)法更靈活。
  • 新手必避坑
    • json.loads()不能直接傳入Python字典/列表,必須先通過(guò)json.dumps()轉(zhuǎn)為JSON字符串;
    • 處理中文時(shí),json.dumps()必須加ensure_ascii=False,否則中文會(huì)被轉(zhuǎn)成Unicode編碼。

五、拓展使用場(chǎng)景

掌握基礎(chǔ)用法后,可結(jié)合文件操作實(shí)現(xiàn)JSON配置文件的讀寫(xiě),這是實(shí)際開(kāi)發(fā)中最常用的拓展場(chǎng)景:

import json
# 1. 將Python對(duì)象寫(xiě)入JSON文件
data = [{"name": "張三"}, {"name": "旺旺"}]
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=4)  # json.dump()直接寫(xiě)入文件,indent=4格式化縮進(jìn)
# 2. 從JSON文件讀取數(shù)據(jù)并轉(zhuǎn)為Python對(duì)象
with open("data.json", "r", encoding="utf-8") as f:
    res = json.load(f)  # json.load()直接從文件讀取并反序列化
    print(res, type(res))

注:json.dump()/json.load()dumps()/loads()的文件版,直接實(shí)現(xiàn)Python對(duì)象與JSON文件的互轉(zhuǎn),無(wú)需手動(dòng)做文件讀寫(xiě)的字符串處理。

到此這篇關(guān)于Python json 模塊核心用法詳解:字典 / 列表與 JSON 字符串互轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Python json 字符串互轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 讀取Linux服務(wù)器上的文件方法

    python 讀取Linux服務(wù)器上的文件方法

    今天小編就為大家分享一篇python 讀取Linux服務(wù)器上的文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • pycharm設(shè)置python文件模板信息過(guò)程圖解

    pycharm設(shè)置python文件模板信息過(guò)程圖解

    這篇文章主要介紹了pycharm設(shè)置python文件模板信息過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Matplotlib繪圖基礎(chǔ)之樣式表詳解

    Matplotlib繪圖基礎(chǔ)之樣式表詳解

    Matplotlib庫(kù)?由于誕生的比較早,所以其默認(rèn)的顯示樣式很難符合現(xiàn)在的審美,不過(guò)經(jīng)過(guò)版本更迭之后,現(xiàn)在?Matplotlib?已經(jīng)內(nèi)置了很多樣式表,下面我們就來(lái)看看這些樣式表的使用吧
    2023-08-08
  • python3 xpath和requests應(yīng)用詳解

    python3 xpath和requests應(yīng)用詳解

    這篇文章主要介紹了python3 xpath和requests應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Python中優(yōu)化堆積條形圖的實(shí)現(xiàn)方法與對(duì)比效果

    Python中優(yōu)化堆積條形圖的實(shí)現(xiàn)方法與對(duì)比效果

    在數(shù)據(jù)可視化中,堆積條形圖 擅長(zhǎng)展示 整體與構(gòu)成 的關(guān)系,今天,本文將嘗試探索一下改進(jìn)堆積條形圖的呈現(xiàn)方式,讓復(fù)雜數(shù)據(jù)對(duì)比變得一目了然,感興趣的小伙伴可以了解下
    2026-01-01
  • 解決pycharm導(dǎo)入numpy包的和使用時(shí)報(bào)錯(cuò):RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的問(wèn)題

    解決pycharm導(dǎo)入numpy包的和使用時(shí)報(bào)錯(cuò):RuntimeError: The current Numpy ins

    這篇文章主要介紹了解決pycharm導(dǎo)入numpy包的和使用時(shí)報(bào)錯(cuò):RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 詳解python中l(wèi)ist的使用

    詳解python中l(wèi)ist的使用

    這篇文章主要介紹了python中l(wèi)ist的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 對(duì)python條件表達(dá)式的四種實(shí)現(xiàn)方法小結(jié)

    對(duì)python條件表達(dá)式的四種實(shí)現(xiàn)方法小結(jié)

    今天小編就為大家分享一篇對(duì)python條件表達(dá)式的四種實(shí)現(xiàn)方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法

    python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法

    今天小編就為大家分享一篇python selenium 獲取標(biāo)簽的屬性值、內(nèi)容、狀態(tài)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • cmd運(yùn)行python文件時(shí)對(duì)結(jié)果進(jìn)行保存的方法

    cmd運(yùn)行python文件時(shí)對(duì)結(jié)果進(jìn)行保存的方法

    今天小編就為大家分享一篇cmd運(yùn)行python文件時(shí)對(duì)結(jié)果進(jìn)行保存的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

邵阳县| 扎赉特旗| 高雄县| 民丰县| 金湖县| 博兴县| 大渡口区| 天峨县| 南宫市| 静乐县| 浦东新区| 镇巴县| 东乡| 延庆县| 马边| 连南| 中超| 遂宁市| 揭阳市| 吉木萨尔县| 南开区| 宜州市| 巴林右旗| 治多县| 嘉荫县| 斗六市| 平舆县| 西平县| 筠连县| 大关县| 天峻县| 诸暨市| 麻城市| 昌平区| 定远县| 突泉县| 九台市| 铅山县| 永善县| 文安县| 叶城县|