如何用Python删除JSON文件中的指定书籍数据?详解实现方法
从JSON文件中移除指定书籍数据的详细实现方法
先明确我们的基础数据示例:
原始JSON文件内容
{ "books": [ { "id": 1, "title": "百年孤独", "author": "加西亚·马尔克斯" }, { "id": 2, "title": "活着", "author": "余华" }, { "id": 3, "title": "三体", "author": "刘慈欣" } ] }
待删除的书籍条目
我们要移除的是id为2的《活着》,对应的条目:
{ "id": 2, "title": "活着", "author": "余华" }
期望的最终结果
{ "books": [ { "id": 1, "title": "百年孤独", "author": "加西亚·马尔克斯" }, { "id": 3, "title": "三体", "author": "刘慈欣" } ] }
核心思路
本质就是读取JSON数据 -> 筛选掉目标条目 -> 将筛选后的结果写回文件,关键是选对可靠的匹配条件(别直接对比整个条目,用唯一标识更稳妥)。
具体实现(以Python为例,最常用的脚本语言)
1. 读取JSON文件
用Python自带的json模块读取文件内容,转成可操作的字典/列表:
import json # 打开并读取原始JSON文件 with open('books.json', 'r', encoding='utf-8') as file: book_data = json.load(file)
2. 筛选要保留的书籍
这里用书籍id作为匹配条件(id是唯一标识,不会重复,比对比书名/作者靠谱),用列表推导式快速筛选:
# 待删除书籍的id,从待删除条目中提取即可 target_id = 2 # 过滤掉id等于target_id的书籍,剩下的就是要保留的 filtered_books = [book for book in book_data['books'] if book['id'] != target_id] # 更新原数据中的books列表 book_data['books'] = filtered_books
3. 将结果写回JSON文件
把处理好的数据重新写入文件,注意参数保证中文显示正常、格式美观:
with open('updated_books.json', 'w', encoding='utf-8') as file: # ensure_ascii=False 避免中文被转成Unicode编码;indent=4 格式化输出,方便阅读 json.dump(book_data, file, ensure_ascii=False, indent=4)
关键要点说明
- 为什么用id匹配?:如果直接对比整个书籍字典,可能因为字段顺序不同(比如待删除条目里字段顺序和原始数据不一样)、或存在额外字段导致匹配失败,id作为唯一标识是最可靠的判断依据。
- 列表推导式的优势:比循环遍历+条件判断的写法更简洁高效,一行代码就能完成筛选。
- 写回文件的参数:
ensure_ascii=False必须加,否则中文会变成\uXXXX这种Unicode编码;indent=4是可选的,让输出的JSON排版整齐,方便人工查看。
补充:Node.js实现(前端/后端常用)
如果用JavaScript处理,逻辑完全一致:
const fs = require('fs'); // 读取文件并解析成JSON对象 const bookData = JSON.parse(fs.readFileSync('books.json', 'utf8')); // 过滤数据 const targetId = 2; bookData.books = bookData.books.filter(book => book.id !== targetId); // 写回文件 fs.writeFileSync('updated_books.json', JSON.stringify(bookData, null, 4), 'utf8');
内容的提问来源于stack exchange,提问作者Moustafa Abouamer
相关产品推荐
相关产品推荐

