Python對JSON數據操作

在Python中,對JSON數據進行增刪改查及加載保存操作,主要通過內置的json模塊實現。


一、基礎操作
1. 加載JSON數據
? 從文件加載

使用json.load()讀取JSON文件并轉換為Python對象(字典/列表):

import json
with open('data.json', 'r', encoding='utf-8') as f:data = json.load(f)

? 從字符串加載

使用json.loads()將JSON字符串解析為Python對象:

json_str = '{"name": "Alice", "age": 30}'
data = json.loads(json_str)

2. 保存JSON數據
? 保存到文件

使用json.dump()將Python對象寫入JSON文件:

with open('data.json', 'w') as f:json.dump(data, f, indent=4)  # indent參數格式化輸出

? 轉換為字符串

使用json.dumps()生成JSON字符串:

json_str = json.dumps(data, ensure_ascii=False)  # 處理中文字符

二、數據操作
1. 查詢數據
通過字典鍵或列表索引訪問數據:

# 示例JSON結構:{"students": [{"id": 1, "name": "Alice"}, ...]}
print(data['students'][0]['name'])  # 輸出:Alice 

2. 新增數據
向列表或字典中添加新條目:

# 添加新學生
new_student = {"id": 4, "name": "David"}
data['students'].append(new_student)  # 列表添加 

3. 修改數據
直接修改字典或列表的值:

# 修改第一個學生的年齡
data['students'][0]['age'] = 25   

4. 刪除數據
使用delpop()刪除條目:

# 刪除第一個學生
del data['students'][0]  # 或 data['students'].pop(0) 

三、進階操作
1. 處理復雜結構
? 嵌套數據操作

通過逐層訪問修改嵌套數據:

data['root']['child']['key'] = 'value'  # 修改多層嵌套數據 

? 條件查詢與修改

結合循環和條件語句:

# 將所有年齡大于20的學生標記為成人
for student in data['students']:if student['age'] > 20:student['is_adult'] = True  # 

2. 處理特殊數據類型
? 日期/時間對象

自定義編碼器處理非標準類型:

from datetime import datetime
def custom_encoder(obj):if isinstance(obj, datetime):return obj.isoformat()raise TypeError("Type not serializable")json_str = json.dumps(data, default=custom_encoder)

? 自定義解碼器

反序列化時還原特殊類型:

def custom_decoder(dct):if 'timestamp' in dct:dct['timestamp'] = datetime.fromisoformat(dct['timestamp'])return dct
data = json.loads(json_str, object_hook=custom_decoder)  # 

四、注意事項

  1. 文件模式:
    ? 'r'用于讀取,'w'會覆蓋原文件,'r+'可讀寫但不保留舊內容。

  2. 編碼問題:
    處理中文時需設置ensure_ascii=False

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81731.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81731.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81731.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux詳解基本指令(一)

?? 歡迎大家來到小傘的大講堂?? 🎈🎈養成好習慣,先贊后看哦~🎈🎈 所屬專欄:LInux_st 小傘的主頁:xiaosan_blog 制作不易!點個贊吧!!謝謝喵!&a…

Node-Red通過Profinet轉ModbusTCP采集西門子PLC數據配置案例

一、內容簡介 本篇內容主要介紹Node-Red通過node-red-contrib-modbus插件與ModbusTCP設備進行通訊,這里Profinet轉ModbusTCP網關作為從站設備,Node-Red作為主站分別從0地址開始讀取10個線圈狀態和10個保持寄存器,分別用Modbus-Read、Modbus-…

React方向:react的基本語法-數據渲染

1、安裝包(js庫) yarn add babel-standalone react react-dom 示例圖.png 2、通過依賴包導入js庫文件 <script src"../node_modules/babel-standalone/babel.js"></script> <script src"../node_modules/react/umd/react.development.js"&g…

k8s部署grafana

部署成功截圖&#xff1a; 要在 Kubernetes (K8s) 集群中拉取 Grafana 鏡像并創建 Grafana 容器&#xff0c;您可以按照以下步驟使用命令行完成操作。下面是完整的命令步驟&#xff0c;包括如何創建 Deployment 和 Service&#xff0c;以及如何將 Grafana 容器暴露給外部。1. 創…

基于注意力機制與iRMB模塊的YOLOv11改進模型—高效輕量目標檢測新范式

隨著深度學習技術的發展,目標檢測在自動駕駛、智能監控、工業質檢等場景中得到了廣泛應用。針對當前主流目標檢測模型在邊緣設備部署中所面臨的計算資源受限和推理效率瓶頸問題,YOLO系列作為單階段目標檢測框架的代表,憑借其高精度與高速度的平衡優勢,在工業界具有極高的應…

uniapp運行到微信開發者工具報錯“更改appid失敗touristappidError:tourist appid”

原因分析 因為項目還沒配置自己的 小程序 AppID&#xff0c;導致微信開發者工具拒絕運行。 解決辦法&#xff1a;在 HBuilderX 中設置 AppID 打開你的項目 在左側找到并點擊 manifest.json 文件 切換到上方的 tab&#xff1a;「小程序配置」標簽頁 找到微信小程序區域&#…

使用Thrust庫實現異步操作與回調函數

文章目錄 使用Thrust庫實現異步操作與回調函數基本異步操作插入回調函數更復雜的回調示例注意事項 使用Thrust庫實現異步操作與回調函數 在Thrust庫中&#xff0c;你可以通過CUDA流(stream)來實現異步操作&#xff0c;并在適當的位置插入回調函數。以下是如何實現的詳細說明&a…

mysql-Java手寫分布式事物提交流程

準備 innodb存儲引擎開啟支持分布式事務 set global innodb_support_axon分布式的流程 詳細流程&#xff1a; XA START ‘a’; 作用&#xff1a;開始一個新的XA事務&#xff0c;并分配一個唯一的事務ID ‘a’。 說明&#xff1a;在這個命令之后&#xff0c;所有后續的SQL操…

算法練習:19.JZ29 順時針打印矩陣

錯誤原因 總體思路有&#xff0c;但不夠清晰&#xff0c;一直在邊調試邊完善。這方面就養成更好的構思習慣&#xff0c;以及漲漲經驗吧。 分析&#xff1a; 思路&#xff1a;找規律 兩個坑&#xff1a; 一次循環的后半段是倒著遍歷的是矩陣不是方陣&#xff0c;要考慮行列…

計算機組成與體系結構:緩存設計概述(Cache Design Overview)

目錄 Block Placement&#xff08;塊放置&#xff09; Block Identification&#xff08;塊識別&#xff09; Block Replacement&#xff08;塊替換&#xff09; Write Strategy&#xff08;寫策略&#xff09; 總結&#xff1a; 高速緩存設計包括四個基礎核心概念&#xf…

Tomcat多應用部署與靜態資源路徑問題全解指南

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

Python----目標檢測(labelimg和labelme的安裝與使用,Pycharm配置教程)

一、labelimg labelimg是一款開源的圖像標注工具&#xff0c;標簽可用于分類和目標檢測&#xff0c;它是用python寫的&#xff0c;并使用Qt作為其圖形界面&#xff0c;簡單好用&#xff08;雖然是英文版的&#xff09;。其注釋以 PASCAL VOC格式保存為XML文件&#xff0c;這是I…

Vue項目部署服務器

Vue項目部署服務器 目錄 Vue項目部署服務器環境配置nginx開放端口打包vue項目配置nginx 環境 vue 2.6.14 nginx 1.26.0配置nginx 準備一個服務器實例 安裝nginx所需依賴 yum -y install pcre* yum -y install openssl*下載wget yum install wget下載nginx到/usr/local cd…

spring框架中的本地緩存:spring cache基本使用

基本概念及原理 處理邏輯 Spring Cache 是 Spring 提供的一整套的緩存解決方案。 雖然它本身并沒有提供緩存的實現&#xff0c;但是它提供了一整套的接口和代碼規范、配置、注解等&#xff0c;這樣它就可以整合各種緩存方案了 處理邏輯&#xff1a;每次調用某方法&#xff…

AI大模型學習二十四、實踐QEMU-KVM 虛擬化:ubuntu server 25.04 下云鏡像創建Ubuntu 虛擬機

一、說明 雖然說大部分的場合&#xff0c;docker都能解決問題&#xff0c;但是有些大型的軟件安裝時如果修改配置會很麻煩&#xff0c;比方說前面遇到的code-server和dify 默認都是80和443端口要使用&#xff0c;安裝在一起就會端口沖突&#xff0c;通過該端口來解決問題&#…

安卓中0dp和match_parent區別

安卓中的 0dp 和 match_parent 的區別&#xff1f; 第一章 前言 有段時間&#xff0c;看到同事在編寫代碼的時候&#xff0c;寫到的是 0dp 有時候自己寫代碼的時候&#xff0c;編寫的是 match_parent 發現有時候效果很類似。 后來通過一個需求案例&#xff0c;才發現兩者有著…

二十、案例特訓專題3【系統設計篇】web架構設計

一、前言 二、內容提要 三、單機到應用與數據分離 四、集群與負載均衡 五、集群與有狀態無狀態服務 六、ORM 七、數據庫讀寫分離 八、數據庫緩存Memcache與Redis 九、Redis數據分片 哈希分片如果新增分片會很麻煩&#xff0c;需要把之前數據取出來再哈希除模 一致性哈希分片是…

基于Rust語言的Rocket框架和Sqlx庫開發WebAPI項目記錄(一)

前置說明 開發語言&#xff1a;Rust Web框架&#xff1a;Rocket 數據庫&#xff1a;PostgreSQL 開發步驟 新建項目&#xff1a; cargo new projectname 在Cargo.toml文件里配置如下依賴&#xff1a; [dependencies] rocket {version"0.5.0",features["json&qu…

中國城市間交通駕車距離矩陣(2024)

中國城市間交通駕車距離矩陣(2024) 1852 數據簡介 中國城市中心的交通駕車距離&#xff0c;該數據為通過審圖號GS(2024)0650的中國城市地圖得其城市中心距離&#xff0c;再通過高德地圖api計算得出其交通駕車最短距離矩陣&#xff0c;單位為KM&#xff0c;方便大家研究使用。…

MySQL替換瀚高數據庫報錯: TO_DAYS()不存在(APP)

文章目錄 環境癥狀問題原因解決方案報錯編碼 環境 系統平臺&#xff1a;中標麒麟&#xff08;海光&#xff09;7,中標麒麟&#xff08;飛騰&#xff09;7 版本&#xff1a;4.5 癥狀 MySQL替換為瀚高數據庫進行應用系統適配報錯&#xff1a;TO_DAYS&#xff08;&#xff09;不…