You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历JSON文件并将指定键值写入新JSON文件?

问题分析与解决

你的代码存在两个核心问题:

  1. 仅访问了目标键但未提取构建新对象,直接将原archive_data完整写入文件,导致输出原对象
  2. 循环内每次用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:48:15