Python對(duì)JSON格式化的多種方法
引言
JSON作為Web開(kāi)發(fā)中最常用的數(shù)據(jù)交換格式,其可讀性和格式規(guī)范性對(duì)開(kāi)發(fā)調(diào)試至關(guān)重要。本文將詳細(xì)介紹Python中格式化JSON的多種方法,幫助開(kāi)發(fā)者高效處理JSON數(shù)據(jù)。
一、基礎(chǔ)格式化方法
1. 使用標(biāo)準(zhǔn)庫(kù)json模塊
import json
data = {"name": "張三", "age": 25, "skills": ["Python", "Java"]}
# 基本格式化
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)
# 輸出結(jié)果:
"""
{
"name": "張三",
"age": 25,
"skills": [
"Python",
"Java"
]
}
"""
關(guān)鍵參數(shù)說(shuō)明:
indent:縮進(jìn)空格數(shù)(推薦2或4)ensure_ascii:設(shè)為False可顯示中文sort_keys:設(shè)為T(mén)rue可按鍵名排序
2. 緊湊格式化
compact_json = json.dumps(data, separators=(',', ':'))
# 輸出:{"name":"張三","age":25,"skills":["Python","Java"]}
二、高級(jí)格式化技巧
1. 自定義格式處理器
def pretty_json(obj):
return json.dumps(obj,
indent=2,
sort_keys=True,
ensure_ascii=False,
separators=(',', ': '))
print(pretty_json(data))
2. 處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)
from datetime import datetime
complex_data = {
"timestamp": datetime.now(),
"nested": {"a": 1, "b": [1, 2, 3]}
}
# 自定義序列化
def default_serializer(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError("Type not serializable")
print(json.dumps(complex_data, default=default_serializer, indent=2))
三、文件操作
1. 寫(xiě)入格式化JSON文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4, ensure_ascii=False)
2. 讀取并格式化
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
print(json.dumps(loaded_data, indent=2))
四、命令行工具
Python自帶JSON格式化工具:
# 格式化文件
python -m json.tool input.json output.json
# 管道操作
echo '{"name":"李四","age":30}' | python -m json.tool
五、第三方庫(kù)推薦
- json5(支持注釋等擴(kuò)展語(yǔ)法)
import json5
data = json5.loads("""{
// 注釋
name: "王五",
age: 28
}""")
- demjson(容錯(cuò)性更強(qiáng))
import demjson
# 自動(dòng)修復(fù)格式錯(cuò)誤
data = demjson.decode("{'key': 'value',}")
六、常見(jiàn)問(wèn)題解決
- 中文亂碼問(wèn)題
# 錯(cuò)誤寫(xiě)法 json.dumps(data) # 中文會(huì)變成Unicode轉(zhuǎn)義 # 正確寫(xiě)法 json.dumps(data, ensure_ascii=False)
- 日期格式處理
from datetime import datetime
def datetime_handler(x):
if isinstance(x, datetime):
return x.isoformat()
raise TypeError("Unknown type")
json.dumps(data, default=datetime_handler)
- 大數(shù)據(jù)量格式化優(yōu)化
# 使用ijson進(jìn)行流式處理
import ijson
with open('large.json', 'rb') as f:
for item in ijson.items(f, 'item'):
print(json.dumps(item, indent=2))
七、格式化驗(yàn)證
def validate_json(json_str):
try:
json.loads(json_str)
return True
except json.JSONDecodeError as e:
print(f"格式錯(cuò)誤:{str(e)}")
return False
總結(jié)
Python提供了多種JSON格式化方案:
- 基礎(chǔ)需求使用標(biāo)準(zhǔn)庫(kù)
json模塊 - 復(fù)雜場(chǎng)景選擇
json5或demjson - 大數(shù)據(jù)量使用流式處理庫(kù)
ijson - 命令行操作使用
python -m json.tool
根據(jù)具體需求選擇合適的方法,合理設(shè)置indent、sort_keys等參數(shù),可以顯著提升JSON數(shù)據(jù)的可讀性和可維護(hù)性。建議始終設(shè)置ensure_ascii=False以獲得更好的中文顯示效果。
以上就是Python對(duì)JSON格式化的多種方法的詳細(xì)內(nèi)容,更多關(guān)于Python對(duì)JSON格式化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python 內(nèi)置函數(shù)complex詳解
這篇文章主要介紹了Python 內(nèi)置函數(shù)complex詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10
pytorch的Backward過(guò)程用時(shí)太長(zhǎng)問(wèn)題及解決
這篇文章主要介紹了pytorch的Backward過(guò)程用時(shí)太長(zhǎng)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
利用Python實(shí)現(xiàn)網(wǎng)絡(luò)運(yùn)維自動(dòng)化的實(shí)戰(zhàn)案例
Python作為一種簡(jiǎn)潔而強(qiáng)大的編程語(yǔ)言,已經(jīng)成為網(wǎng)絡(luò)運(yùn)維自動(dòng)化的熱門(mén)選擇,本文將介紹如何利用Python實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備配置管理、監(jiān)控和故障排除等自動(dòng)化任務(wù),并提供代碼示例,需要的朋友可以參考下2024-03-03
Python利用openpyxl類(lèi)實(shí)現(xiàn)在Excel中繪制樂(lè)高圖案
在商場(chǎng)看到一個(gè)超級(jí)瑪麗的樂(lè)高圖,感覺(jué)使用excel的顏色填充也能畫(huà)出來(lái)。所以本文將借助openpyxl類(lèi)實(shí)現(xiàn)在Excel中繪制樂(lè)高圖案,需要的可以參考一下2022-12-12
Python驅(qū)動(dòng)ansys執(zhí)行apdl文件的代碼示例
在Python中驅(qū)動(dòng)ANSYS執(zhí)行APDL(ANSYS Parametric Design Language)文件,可以通過(guò)使用subprocess模塊來(lái)調(diào)用ANSYS的可執(zhí)行文件,并傳遞APDL文件作為參數(shù),本文給大家介紹了一個(gè)詳細(xì)的代碼示例,需要的朋友可以參考下2024-11-11
Python高級(jí)應(yīng)用探索之元編程和并發(fā)編程詳解
Python作為一種簡(jiǎn)單易用且功能強(qiáng)大的編程語(yǔ)言,廣泛應(yīng)用于各個(gè)領(lǐng)域,本文主要來(lái)和大家一起探索一下Python中的優(yōu)化技巧、元編程和并發(fā)編程,希望對(duì)大家有所幫助2023-11-11
Python爬蟲(chóng)程序架構(gòu)和運(yùn)行流程原理解析
這篇文章主要介紹了Python爬蟲(chóng)程序架構(gòu)和運(yùn)行流程原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Python中requests庫(kù)的基本概念與具體使用方法
requests庫(kù)是用python編寫(xiě)的基于urllib,requests唯一的一個(gè)非轉(zhuǎn)基因的Python HTTP庫(kù),下面這篇文章主要給大家介紹了關(guān)于Python中requests庫(kù)的基本概念與具體使用方法,需要的朋友可以參考下2022-08-08
python xxx.py 和 python -m xxx兩種執(zhí)行方式
本文主要介紹了python xxx.py 和 python -m xxx兩種執(zhí)行方式的使用場(chǎng)景和問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12

