Python3入門之JSON數(shù)據(jù)解析全面學習教程
前言
Python作為一門簡潔、易讀、功能強大的編程語言,其基礎(chǔ)語法是入門學習的核心。掌握好基礎(chǔ)語法,能為后續(xù)的編程實踐打下堅實的基礎(chǔ)。本文將全面講解Python3的基礎(chǔ)語法知識,適合編程初學者系統(tǒng)學習。Python以其簡潔優(yōu)雅的語法和強大的通用性,成為當今最受歡迎的編程語言。本專欄旨在系統(tǒng)性地帶你從零基礎(chǔ)入門到精通Python核心。無論你是零基礎(chǔ)小白還是希望進階的專業(yè)開發(fā)者,都將通過清晰的講解、豐富的實例和實戰(zhàn)項目,逐步掌握語法基礎(chǔ)、核心數(shù)據(jù)結(jié)構(gòu)、函數(shù)與模塊、面向?qū)ο缶幊?、文件處理、主流庫?yīng)用(如數(shù)據(jù)分析、Web開發(fā)、自動化)以及面向?qū)ο蟾呒壧匦?,最終具備獨立開發(fā)能力和解決復(fù)雜問題的思維,高效應(yīng)對數(shù)據(jù)分析、人工智能、Web應(yīng)用、自動化腳本等廣泛領(lǐng)域的實際需求。


在當今的數(shù)據(jù)交換場景中,JSON(JavaScript Object Notation)憑借其輕量級、易讀易寫的特性,成為了前后端交互、API數(shù)據(jù)傳輸?shù)闹髁鞲袷?。而Python作為數(shù)據(jù)分析和后端開發(fā)的熱門語言,內(nèi)置了json模塊來高效處理JSON數(shù)據(jù)。本文將從JSON基礎(chǔ)概念入手,詳細講解Python3中json模塊的核心函數(shù)用法,結(jié)合實例幫助你快速掌握JSON數(shù)據(jù)的編解碼技巧。
一、JSON基礎(chǔ):為什么它如此重要
JSON是一種基于文本的輕量級數(shù)據(jù)交換格式,它源于JavaScript,但如今已成為跨語言、跨平臺的數(shù)據(jù)交換標準。相比于XML,JSON語法更簡潔、解析速度更快,非常適合傳輸結(jié)構(gòu)化數(shù)據(jù)(如用戶信息、接口返回結(jié)果等)。
如果你對JSON語法尚不熟悉,可以先了解其核心數(shù)據(jù)類型:
- 對象(對應(yīng)Python的字典):用
{key: value}表示,鍵值對之間用逗號分隔 - 數(shù)組(對應(yīng)Python的列表):用
[value1, value2, ...]表示 - 基本類型:字符串(雙引號包裹)、數(shù)字(整數(shù)/浮點數(shù))、布爾值(
true/false)、空值(null)
二、Python3json模塊核心函數(shù)
Python3的標準庫json模塊提供了4個核心函數(shù),分別用于字符串級別的編解碼和文件級別的編解碼,覆蓋了絕大多數(shù)JSON處理場景。
| 函數(shù)用途 | 函數(shù)名 | 核心作用 |
|---|---|---|
| Python數(shù)據(jù)編碼為JSON字符串 | json.dumps() | 將Python原生數(shù)據(jù)類型轉(zhuǎn)換為JSON格式字符串 |
| JSON字符串解碼為Python數(shù)據(jù) | json.loads() | 將JSON格式字符串轉(zhuǎn)換為Python原生數(shù)據(jù)類型 |
| Python數(shù)據(jù)寫入JSON文件 | json.dump() | 將Python數(shù)據(jù)直接寫入文件(JSON格式) |
| 從JSON文件讀取Python數(shù)據(jù) | json.load() | 從JSON文件中讀取數(shù)據(jù)并轉(zhuǎn)換為Python類型 |
三、關(guān)鍵知識點:Python與JSON類型對應(yīng)關(guān)系
在編解碼過程中,Python原生類型與JSON類型會自動轉(zhuǎn)換,理解對應(yīng)關(guān)系是避免數(shù)據(jù)異常的關(guān)鍵。
1. Python編碼為JSON的類型映射
當使用json.dumps()或json.dump()時,Python數(shù)據(jù)會按照以下規(guī)則轉(zhuǎn)換為JSON類型:
| Python原生類型 | 轉(zhuǎn)換后的JSON類型 | 示例 |
|---|---|---|
| dict(字典) | object(對象) | {'name': 'xcLeigh'} → {"name": "xcLeigh"} |
| list(列表)、tuple(元組) | array(數(shù)組) | [1, 2, 3] → [1,2,3];(1,2,3) → [1,2,3] |
| str(字符串) | string(字符串) | "Python" → "Python" |
| int/float(整數(shù)/浮點數(shù)) | number(數(shù)字) | 100 → 100;3.14 → 3.14 |
| True(布爾值) | true | True → true |
| False(布爾值) | false | False → false |
| None(空值) | null | None → null |
2. JSON解碼為Python的類型映射
當使用json.loads()或json.load()時,JSON類型會按照以下規(guī)則轉(zhuǎn)換為Python類型:
| JSON類型 | 轉(zhuǎn)換后的Python類型 | 示例 |
|---|---|---|
| object(對象) | dict(字典) | {"no": 1} → {'no': 1} |
| array(數(shù)組) | list(列表) | ["xcLeigh", "Python"] → ['xcLeigh', 'Python'] |
| string(字符串) | str(字符串) | "https://xcleigh.blog.csdn.net/" → "https://xcleigh.blog.csdn.net/" |
| number(int)(整數(shù)) | int(整數(shù)) | 10 → 10 |
| number(real)(浮點數(shù)) | float(浮點數(shù)) | 3.14 → 3.14 |
| true | True | true → True |
| false | False | false → False |
| null | None | null → None |
四、實戰(zhàn)案例:從字符串到文件的完整操作
理論結(jié)合實踐才能快速掌握,下面通過3個遞進的案例,演示json模塊的核心用法。
案例1:Python數(shù)據(jù)編碼為JSON字符串(json.dumps())
將Python字典(最常用的結(jié)構(gòu)化數(shù)據(jù)類型)轉(zhuǎn)換為JSON字符串,方便后續(xù)傳輸或存儲。
#!/usr/bin/python3
import json
# 1. 定義Python字典(原始數(shù)據(jù))
data = {
'no': 1,
'name': 'xcLeigh',
'url': 'https://xcleigh.blog.csdn.net/',
'is_active': True,
'tags': ['Python', 'JSON', '教程'],
'score': 98.5,
'extra_info': None
}
# 2. 使用json.dumps()編碼為JSON字符串
json_str = json.dumps(data)
# 3. 打印結(jié)果對比
print("Python原始數(shù)據(jù)(字典類型):", repr(data))
print("JSON字符串(類型):", json_str)
print("JSON字符串的類型:", type(json_str)) # 輸出 <class 'str'>
運行結(jié)果:
Python原始數(shù)據(jù)(字典類型): {'no': 1, 'name': 'xcLeigh', 'url': 'https://xcleigh.blog.csdn.net/', 'is_active': True, 'tags': ['Python', 'JSON', '教程'], 'score': 98.5, 'extra_info': None}
JSON字符串(類型): {"no": 1, "name": "xcLeigh", "url": "https://xcleigh.blog.csdn.net/", "is_active": true, "tags": ["Python", "JSON", "教程"], "score": 98.5, "extra_info": null}
JSON字符串的類型: <class 'str'>

關(guān)鍵說明:
- Python的
True轉(zhuǎn)換為JSON的true,None轉(zhuǎn)換為null(JSON語法要求小寫) - Python字典的鍵是字符串時,JSON字符串的鍵會自動用雙引號包裹(JSON鍵必須是雙引號字符串)
案例2:JSON字符串解碼為Python數(shù)據(jù)(json.loads())
將API返回的JSON字符串(或前端傳遞的JSON數(shù)據(jù))轉(zhuǎn)換為Python字典,方便后續(xù)數(shù)據(jù)處理(如提取字段、計算等)。
#!/usr/bin/python3
import json
# 1. 模擬一個JSON字符串(例如API返回結(jié)果)
json_str = '''
{
"no": 1,
"name": "xcLeigh",
"url": "https://xcleigh.blog.csdn.net/",
"is_active": true,
"tags": ["Python", "JSON", "教程"],
"score": 98.5,
"extra_info": null
}
'''
# 2. 使用json.loads()解碼為Python字典
data = json.loads(json_str)
# 3. 提取并使用數(shù)據(jù)
print("解碼后的Python數(shù)據(jù)類型:", type(data)) # 輸出 <class 'dict'>
print("網(wǎng)站名稱:", data['name']) # 輸出 xcLeigh
print("網(wǎng)站URL:", data['url']) # 輸出 https://xcleigh.blog.csdn.net/
print("是否活躍:", data['is_active']) # 輸出 True
print("標簽列表:", data['tags'][0]) # 輸出 Python(提取列表第一個元素)
運行結(jié)果:
解碼后的Python數(shù)據(jù)類型: <class 'dict'>
網(wǎng)站名稱: xcLeigh
網(wǎng)站URL:https://xcleigh.blog.csdn.net/
是否活躍: True
標簽列表: Python
關(guān)鍵說明:
- JSON字符串中的
true會轉(zhuǎn)換為Python的True,null轉(zhuǎn)換為None - 解碼后的數(shù)據(jù)可以直接用Python字典的語法操作(如
data['key']提取值)
案例3:Python數(shù)據(jù)與JSON文件的交互(json.dump()/json.load())
當需要持久化存儲JSON數(shù)據(jù)(如配置文件、日志數(shù)據(jù))時,直接使用json.dump()和json.load()操作文件,無需手動處理字符串寫入/讀取。
步驟1:將Python數(shù)據(jù)寫入JSON文件(json.dump())
#!/usr/bin/python3
import json
# 1. 定義Python數(shù)據(jù)
data = {
'no': 1,
'name': 'xcLeigh',
'url': 'https://xcleigh.blog.csdn.net/',
'tags': ['Python', 'JSON']
}
# 2. 使用with語句打開文件,自動管理文件關(guān)閉
with open('data.json', 'w', encoding='utf-8') as f:
# json.dump(數(shù)據(jù), 文件對象)
json.dump(data, f, ensure_ascii=False, indent=4)
print("JSON數(shù)據(jù)已成功寫入data.json文件")
參數(shù)說明:
ensure_ascii=False:允許寫入非ASCII字符(如中文),避免亂碼indent=4:格式化輸出,縮進4個空格,增強文件可讀性
運行后會生成data.json文件,內(nèi)容如下:
{
"no": 1,
"name": "xcLeigh",
"url": "https://xcleigh.blog.csdn.net/",
"tags": [
"Python",
"JSON"
]
}
步驟2:從JSON文件讀取數(shù)據(jù)(json.load())
#!/usr/bin/python3
import json
# 1. 使用with語句讀取文件
with open('data.json', 'r', encoding='utf-8') as f:
# json.load(文件對象):讀取文件并解碼為Python數(shù)據(jù)
data = json.load(f)
# 2. 使用讀取到的數(shù)據(jù)
print("從文件讀取的Python數(shù)據(jù):", data)
print("網(wǎng)站名稱:", data['name'])
print("標簽數(shù)量:", len(data['tags']))
運行結(jié)果:
從文件讀取的Python數(shù)據(jù): {'no': 1, 'name': 'xcLeigh', 'url': 'https://xcleigh.blog.csdn.net/', 'tags': ['Python', 'JSON']}
網(wǎng)站名稱: xcLeigh
標簽數(shù)量: 2
五、常見問題與注意事項
數(shù)據(jù)類型不匹配錯誤:若Python數(shù)據(jù)中包含json模塊不支持的類型(如datetime對象、自定義類實例),直接編碼會報錯。解決方案:自定義default參數(shù)(如json.dumps(data, default=str)將不支持的類型轉(zhuǎn)為字符串)。
文件編碼問題:寫入/讀取JSON文件時,務(wù)必指定encoding='utf-8',否則中文等非ASCII字符可能出現(xiàn)亂碼。
dumps與dump、loads與load的區(qū)別:
- 帶
s的函數(shù)(dumps/loads):操作字符串,適用于內(nèi)存中的數(shù)據(jù)處理(如API交互)。 - 不帶
s的函數(shù)(dump/load):操作文件對象,適用于文件持久化存儲。
到此這篇關(guān)于Python3入門之JSON數(shù)據(jù)解析全面學習教程的文章就介紹到這了,更多相關(guān)Python3 JSON數(shù)據(jù)解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3 串口接收與發(fā)送16進制數(shù)據(jù)包的實例
今天小編就為大家分享一篇Python3 串口接收與發(fā)送16進制數(shù)據(jù)包的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
基于Python和Tkinter實現(xiàn)文本文件轉(zhuǎn)換為MP3語音文件
本文介紹了基于Python和Tkinter的圖形界面應(yīng)用程序,該程序用于將文本文件轉(zhuǎn)換為MP3語音文件,功能包括文本轉(zhuǎn)語音轉(zhuǎn)換、文件處理、語音參數(shù)調(diào)節(jié)等,用戶界面設(shè)計合理,具有多線程處理、自動保存和錯誤處理等技術(shù)特點,使用流程簡單易懂,附帶幫助文檔2026-02-02
pycharm創(chuàng)建并使用虛擬環(huán)境的詳細圖文教程
Python的虛擬環(huán)境是正常的現(xiàn)實環(huán)境相對應(yīng)的,在虛擬環(huán)境中安裝的包是與現(xiàn)實環(huán)境隔離的,下面這篇文章主要給大家介紹了關(guān)于pycharm創(chuàng)建并使用虛擬環(huán)境的詳細圖文教程,需要的朋友可以參考下2022-08-08
詳解Python排序算法的實現(xiàn)(冒泡,選擇,插入,快速)
這篇文章主要為大家介紹了Python中常見的四種排序算法的實現(xiàn):冒泡排序、選擇排序、插入排序和快速排序,文中通過圖片詳細講解了它們實現(xiàn)的原理與代碼,需要的可以參考一下2022-04-04

