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

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

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

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

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

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

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

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

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

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è)置后可正常顯示中文,這是開發(fā)中必設(shè)的參數(shù)。

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

場景1:單個(gè)Python字典轉(zhuǎn)字符串/JSON字符串

代碼示例:

import json  # 導(dǎo)入內(nèi)置json模塊,無需額外安裝
# 定義一個(gè)Python字典對象
d = {
    "name":"張三"
}
# 方式1:用str()做簡單的字符串轉(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的語法特征——鍵值對用單引號,這并不是標(biāo)準(zhǔn)的JSON字符串,其他語言/工具無法識(shí)別。
  • json.dumps(d, ensure_ascii=False):生成標(biāo)準(zhǔn)JSON字符串,鍵值對用雙引號(符合JSON語法規(guī)范),且中文正常顯示,是開發(fā)中的正確用法。

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

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

# 定義一個(gè)Python列表,內(nèi)部嵌套兩個(gè)字典
d2 = [{
    "name":"張三"
},{
    "name":"旺旺"
}]
# 方式1:str()簡單轉(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列表的字符串表示(單引號),而json.dumps()生成的是標(biāo)準(zhǔn)JSON數(shù)組字符串(雙引號),可直接被前端、其他語言解析,這也是實(shí)際開發(fā)中唯一推薦的轉(zhuǎn)換方式。

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

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

json.loads(json_str)

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

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

原代碼中這部分寫法存在語法錯(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是列表,類型不匹配,程序無法解析。

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

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

import json
# 1. 定義原始Python對象
rp = {"name": "張三"}  # 字典
rpj = [{"name": "張三"}, {"name": "旺旺"}]  # 列表嵌套字典
# 2. 先通過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. 再通過loads()轉(zhuǎn)回Python對象
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)還原為對應(yīng)的Python類型——JSON對象→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():僅做簡單的類型轉(zhuǎn)換,保留Python語法特征(單引號),生成的不是標(biāo)準(zhǔn)JSON字符串;
    • json.dumps():做序列化轉(zhuǎn)換,生成符合JSON語法的字符串(雙引號),可跨平臺(tái)/跨語言解析。
  • JSON和Python對象的語法差異
    • JSON:鍵值對必須用雙引號,數(shù)組/對象嵌套格式嚴(yán)格;
    • Python字典/列表:鍵值對支持單/雙引號,語法更靈活。
  • 新手必避坑
    • json.loads()不能直接傳入Python字典/列表,必須先通過json.dumps()轉(zhuǎn)為JSON字符串;
    • 處理中文時(shí),json.dumps()必須加ensure_ascii=False,否則中文會(huì)被轉(zhuǎn)成Unicode編碼。

五、拓展使用場景

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

import json
# 1. 將Python對象寫入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()直接寫入文件,indent=4格式化縮進(jìn)
# 2. 從JSON文件讀取數(shù)據(jù)并轉(zhuǎn)為Python對象
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對象與JSON文件的互轉(zhuǎn),無需手動(dòng)做文件讀寫的字符串處理。

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

相關(guān)文章

最新評論

高平市| 甘南县| 昌江| 鞍山市| 龙山县| 海丰县| 富源县| 井研县| 肥城市| 琼中| 高淳县| 武强县| 名山县| 镇赉县| 邯郸市| 克山县| 鲜城| 蒲江县| 观塘区| 静安区| 安乡县| 那曲县| 福鼎市| 中江县| 梁平县| 贵定县| 海口市| 噶尔县| 潼南县| 阿城市| 余姚市| 梅河口市| 磐安县| 连山| 平顺县| 鄂州市| 乐陵市| 凤城市| 萍乡市| 岚皋县| 泰宁县|