python讀寫json、格式化寫入json文件實現(xiàn)方式
JSON與Python序列化操作指南
一、JSON概述
定義
JSON(JavaScript Object Notation)是一種輕量級數(shù)據(jù)交換格式,基于ECMAScript子集,具有以下特性:
- 語言無關的文本格式
- 語法類似C語言家族(C/C++/Java/JavaScript等)
- 人類可讀且機器高效解析
- 廣泛用于網(wǎng)絡數(shù)據(jù)傳輸
Python中的映射關系
JSON數(shù)組 ? Python列表(list) JSON對象 ? Python字典(dict)
二、序列化模塊對比
| 特性 | json 模塊 | pickle 模塊 |
|---|---|---|
| 跨語言支持 | ?? (多語言兼容) | ? (僅Python) |
| 數(shù)據(jù)類型支持 | 基礎類型(字典/列表/字符串/數(shù)字) | 所有Python類型(類/函數(shù)等) |
| 安全性 | 高(無代碼執(zhí)行風險) | 低(可能執(zhí)行任意代碼) |
| 典型用途 | API數(shù)據(jù)交換、配置文件 | Python對象持久化存儲 |
三、json模塊核心方法
1. dumps():數(shù)據(jù)類型 → JSON字符串
import json
test_dict = {'one': 1, 'two': {2.1: ['a', 'b']}}
json_str = json.dumps(test_dict) # 關鍵操作
print(f"原始類型: {type(test_dict)}") # <class 'dict'>
print(f"轉換后類型: {type(json_str)}") # <class 'str'>
print(f"JSON字符串: {json_str}") # {"one": 1, "two": {"2.1": ["a", "b"]}}
注意:鍵2.1會被轉換為字符串(JSON規(guī)范要求鍵必須是字符串)
2. loads():JSON字符串 → Python數(shù)據(jù)類型
new_dict = json.loads(json_str) # 解析JSON字符串
print(f"解析后類型: {type(new_dict)}") # <class 'dict'>
print(f"內容: {new_dict}") # {'one': 1, 'two': {'2.1': ['a', 'b']}}
3. dump():字典 → JSON文件
with open("record.json", "w") as f:
json.dump(new_dict, f) # 寫入文件
print("JSON文件寫入完成")
生成文件內容:
{"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"內容: {load_dict}") # {'one': 1, 'two': {'2.1': ['a', 'b']}}
四、JSON文件格式化技巧
兩種等效實現(xiàn)方式:
# 方法1:dumps() + 手動寫入
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)
關鍵參數(shù):
indent=4:4空格縮進格式化ensure_ascii=False:支持非ASCII字符(如中文)
格式化后文件:
{
"one": 1,
"two": {
"2.1": [
"a",
"b"
]
}
}
核心總結
基礎轉換
dumps/loads:內存對象 ↔ JSON字符串dump/load:文件 ↔ 內存對象
數(shù)據(jù)類型限制
JSON不支持Python特有類型(如日期/類對象),此時需用pickle。
最佳實踐
# 寫入推薦
json.dump(data, file, indent=2, ensure_ascii=False)
# 讀取推薦
with open("data.json") as f:
data = json.load(f)
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python requests庫參數(shù)提交的注意事項總結
這篇文章主要給大家介紹了關于Python requests庫參數(shù)提交的注意事項,文中通過示例代碼和圖片介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
使用pytest結合Playwright實現(xiàn)頁面元素在兩個區(qū)域間拖拽功能
本文介紹了如何使用pytest結合Playwright實現(xiàn)頁面元素在兩個區(qū)域間的拖拽操作,通過創(chuàng)建一個簡單的HTML頁面和JavaScript代碼來實現(xiàn)拖放功能,并使用Playwright的API來模擬和驗證拖拽操作,需要的朋友可以參考下2026-01-01
Python使用sys.argv與argparse進行命令行參數(shù)處理
在Python開發(fā)中,命令行參數(shù)處理是高頻需求, 小到快速編寫的測試腳本,大到生產級的命令行工具,都需要接收外部傳入的參數(shù)并解析,Python提供了多種處理命令行參數(shù)的方式,其中sys.argv和argparse是最常用的兩種,本文將結合實戰(zhàn)代碼,深度解析兩者的特點及區(qū)別2026-03-03
利用Jmeter實現(xiàn)在請求param和body里面加入隨機參數(shù)
本文介紹了如何使用jemeter實現(xiàn)新增接口壓力測試中的隨機參數(shù)生成,首先,使用函數(shù)助手對話框生成隨機數(shù),然后將生成的隨機數(shù)作為參數(shù)放入請求中,無論請求格式是json、xml還是text等,如果param和body同時存在并需要隨機生成參數(shù),可以把參數(shù)寫入到請求地址中2024-10-10

