python讀寫(xiě)json、格式化寫(xiě)入json文件實(shí)現(xiàn)方式
JSON與Python序列化操作指南
一、JSON概述
定義
JSON(JavaScript Object Notation)是一種輕量級(jí)數(shù)據(jù)交換格式,基于ECMAScript子集,具有以下特性:
- 語(yǔ)言無(wú)關(guān)的文本格式
- 語(yǔ)法類似C語(yǔ)言家族(C/C++/Java/JavaScript等)
- 人類可讀且機(jī)器高效解析
- 廣泛用于網(wǎng)絡(luò)數(shù)據(jù)傳輸
Python中的映射關(guān)系
JSON數(shù)組 ? Python列表(list) JSON對(duì)象 ? Python字典(dict)
二、序列化模塊對(duì)比
| 特性 | json 模塊 | pickle 模塊 |
|---|---|---|
| 跨語(yǔ)言支持 | ?? (多語(yǔ)言兼容) | ? (僅Python) |
| 數(shù)據(jù)類型支持 | 基礎(chǔ)類型(字典/列表/字符串/數(shù)字) | 所有Python類型(類/函數(shù)等) |
| 安全性 | 高(無(wú)代碼執(zhí)行風(fēng)險(xiǎn)) | 低(可能執(zhí)行任意代碼) |
| 典型用途 | API數(shù)據(jù)交換、配置文件 | Python對(duì)象持久化存儲(chǔ) |
三、json模塊核心方法
1. dumps():數(shù)據(jù)類型 → JSON字符串
import json
test_dict = {'one': 1, 'two': {2.1: ['a', 'b']}}
json_str = json.dumps(test_dict) # 關(guān)鍵操作
print(f"原始類型: {type(test_dict)}") # <class 'dict'>
print(f"轉(zhuǎn)換后類型: {type(json_str)}") # <class 'str'>
print(f"JSON字符串: {json_str}") # {"one": 1, "two": {"2.1": ["a", "b"]}}
注意:鍵2.1會(huì)被轉(zhuǎn)換為字符串(JSON規(guī)范要求鍵必須是字符串)
2. loads():JSON字符串 → Python數(shù)據(jù)類型
new_dict = json.loads(json_str) # 解析JSON字符串
print(f"解析后類型: {type(new_dict)}") # <class 'dict'>
print(f"內(nèi)容: {new_dict}") # {'one': 1, 'two': {'2.1': ['a', 'b']}}
3. dump():字典 → JSON文件
with open("record.json", "w") as f:
json.dump(new_dict, f) # 寫(xiě)入文件
print("JSON文件寫(xiě)入完成")
生成文件內(nèi)容:
{"one": 1, "two": {"2.1": ["a", "b"]}}
4. load():JSON文件 → Python字典
with open("record.json", "r") as load_f:
load_dict = json.load(load_f) # 從文件加載
print(f"文件解析類型: {type(load_dict)}") # <class 'dict'>
print(f"內(nèi)容: {load_dict}") # {'one': 1, 'two': {'2.1': ['a', 'b']}}
四、JSON文件格式化技巧
兩種等效實(shí)現(xiàn)方式:
# 方法1:dumps() + 手動(dòng)寫(xiě)入
with open("format_json.json", "w") as f:
f.write(json.dumps(load_dict, indent=4, ensure_ascii=False))
# 方法2:直接使用dump()參數(shù)
with open("format_json.json", "w") as f:
json.dump(load_dict, f, indent=4, ensure_ascii=False)
關(guān)鍵參數(shù):
indent=4:4空格縮進(jìn)格式化ensure_ascii=False:支持非ASCII字符(如中文)
格式化后文件:
{
"one": 1,
"two": {
"2.1": [
"a",
"b"
]
}
}
核心總結(jié)
基礎(chǔ)轉(zhuǎn)換
dumps/loads:內(nèi)存對(duì)象 ↔ JSON字符串dump/load:文件 ↔ 內(nèi)存對(duì)象
數(shù)據(jù)類型限制
JSON不支持Python特有類型(如日期/類對(duì)象),此時(shí)需用pickle。
最佳實(shí)踐
# 寫(xiě)入推薦
json.dump(data, file, indent=2, ensure_ascii=False)
# 讀取推薦
with open("data.json") as f:
data = json.load(f)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決PyCharm無(wú)法使用lxml庫(kù)的問(wèn)題(圖解)
這篇文章主要介紹了解決PyCharm無(wú)法使用lxml庫(kù)的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Python requests庫(kù)參數(shù)提交的注意事項(xiàng)總結(jié)
這篇文章主要給大家介紹了關(guān)于Python requests庫(kù)參數(shù)提交的注意事項(xiàng),文中通過(guò)示例代碼和圖片介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
簡(jiǎn)介二分查找算法與相關(guān)的Python實(shí)現(xiàn)示例
這篇文章主要介紹了二分查找算法與相關(guān)的Python實(shí)現(xiàn)示例,Binary Search同時(shí)也是算法學(xué)習(xí)當(dāng)中最基礎(chǔ)的知識(shí),需要的朋友可以參考下2015-08-08
使用pytest結(jié)合Playwright實(shí)現(xiàn)頁(yè)面元素在兩個(gè)區(qū)域間拖拽功能
本文介紹了如何使用pytest結(jié)合Playwright實(shí)現(xiàn)頁(yè)面元素在兩個(gè)區(qū)域間的拖拽操作,通過(guò)創(chuàng)建一個(gè)簡(jiǎn)單的HTML頁(yè)面和JavaScript代碼來(lái)實(shí)現(xiàn)拖放功能,并使用Playwright的API來(lái)模擬和驗(yàn)證拖拽操作,需要的朋友可以參考下2026-01-01
Python使用sys.argv與argparse進(jìn)行命令行參數(shù)處理
在Python開(kāi)發(fā)中,命令行參數(shù)處理是高頻需求, 小到快速編寫(xiě)的測(cè)試腳本,大到生產(chǎn)級(jí)的命令行工具,都需要接收外部傳入的參數(shù)并解析,Python提供了多種處理命令行參數(shù)的方式,其中sys.argv和argparse是最常用的兩種,本文將結(jié)合實(shí)戰(zhàn)代碼,深度解析兩者的特點(diǎn)及區(qū)別2026-03-03
python 爬取吉首大學(xué)網(wǎng)站成績(jī)單
python簡(jiǎn)單爬蟲(chóng),爬取吉首大學(xué)成績(jī)單,學(xué)校的成績(jī)單居然不支持導(dǎo)出,太坑了,算個(gè)績(jī)點(diǎn)居然還要手打,我吐了.花2個(gè)多小時(shí)寫(xiě)了此python程序來(lái)生成可方便求和平均的Excel文件,幫助JSU學(xué)子脫離手算煩惱...2021-06-06
python中pyc、?pyd文件及生成使用完整實(shí)例代碼
這篇文章主要介紹了python中pyc、?pyd文件及生成使用的相關(guān)資料,重點(diǎn)講解了如何使用Python解釋器編譯.py文件為.pyc文件,以及如何使用Cython和distutils工具將C/C++代碼編譯為.pyd文件,需要的朋友可以參考下2025-04-04
利用Jmeter實(shí)現(xiàn)在請(qǐng)求param和body里面加入隨機(jī)參數(shù)
本文介紹了如何使用jemeter實(shí)現(xiàn)新增接口壓力測(cè)試中的隨機(jī)參數(shù)生成,首先,使用函數(shù)助手對(duì)話框生成隨機(jī)數(shù),然后將生成的隨機(jī)數(shù)作為參數(shù)放入請(qǐng)求中,無(wú)論請(qǐng)求格式是json、xml還是text等,如果param和body同時(shí)存在并需要隨機(jī)生成參數(shù),可以把參數(shù)寫(xiě)入到請(qǐng)求地址中2024-10-10

