如何遍历JSON文件并将指定键值写入新JSON文件?
问题分析与解决
你的代码存在两个核心问题:
- 仅访问了目标键但未提取构建新对象,直接将原
archive_data完整写入文件,导致输出原对象 - 循环内每次用
w模式打开文件,会覆盖之前写入的内容,最终文件只会保留最后一条遍历数据
修正方案
步骤说明
- 用
with语句管理文件读写,自动处理文件关闭 - 先创建空列表存储所有提取后的目标数据
- 遍历原数据时,构建仅包含指定键的新字典
- 最后一次性将所有提取的数据写入新文件
修正后代码
import json def get_keys_values(): # 读取原JSON文件,用with自动关闭文件 with open("get_failed_archives.json", "r") as json_file: json_data = json.load(json_file) # 存储提取后的所有数据 extracted_data = [] for archive_data in json_data["data"]: # 构建仅包含指定键的新字典 filtered_event = { "objectName": archive_data["latestEvent"]["objectName"], "time": archive_data["latestEvent"]["time"], "eventType": archive_data["latestEvent"]["eventType"], "eventStatus": archive_data["latestEvent"]["eventStatus"] } # 如果需要保留archive_data的其他顶级键,可修改为如下形式: # filtered_item = { # "latestEvent": filtered_event, # # 其他需要保留的顶级键,比如"id": archive_data["id"] # } # extracted_data.append(filtered_item) extracted_data.append(filtered_event) # 一次性写入所有提取的数据 with open("new_json_file.json", "w") as file: json.dump(extracted_data, file, indent=4) # indent参数让JSON格式化输出,可选
代码说明
filtered_event字典仅保留你需要的latestEvent下的四个键值对,若需要保留原数据的其他顶级键,可按照注释中的方式调整extracted_data列表收集所有遍历后的过滤结果,最后一次性写入文件,避免循环覆盖问题indent=4参数用于格式化JSON输出,让文件更易读,可根据需求移除
内容的提问来源于stack exchange,提问作者user15565485
相关产品推荐
相关产品推荐

