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

如何解析并访问特定JSON格式事件日志中的winlog与event数据?

问题分析与解决方法

错误原因

你的JSON日志最外层是数组(列表),直接用logs['event']或logs[i]["event"]会报错——列表只能用整数索引,不能用字符串;而且event和winlog都嵌套在每个日志项的_source字段里,不是直接在列表元素下。

正确访问方式

遍历日志列表时,每个循环变量是单个日志对象,需要先进入_source字段,再访问event和winlog。

示例代码

import json

with open('logs.json', 'r') as json_file:
    logs = json.load(json_file)

# 遍历每个日志项
for log_item in logs:
    # 获取_source里的核心数据
    source_data = log_item['_source']
    event_data = source_data['event']
    winlog_data = source_data['winlog']
    
    # 提取并格式化打印需要的字段
    print("=== 日志详情 ===")
    print(f"事件动作: {event_data['action']}")
    print(f"事件代码: {event_data['code']}")
    print(f"事件创建时间: {event_data['created']}")
    print(f"Winlog任务: {winlog_data['task']}")
    print(f"目标用户名: {winlog_data['event_data']['TargetUserName']}")
    print(f"目标域名: {winlog_data['event_data']['TargetDomainName']}")
    print(f"登录类型: {winlog_data['event_data']['LogonTypeName']}")
    print(f"IP地址: {winlog_data['event_data']['IpAddress']}")
    print("----------------\n")

代码说明

  • logs是加载后的列表,每个log_item是列表中的单个日志对象。
  • 先取出log_item['_source'],这才是包含所有业务数据的字典。
  • 从source_data中分别提取event和winlog字段,再进一步获取嵌套的子字段,比如winlog['event_data']['TargetUserName']。

简化打印(如果需要更简洁的输出)

如果只需要输出关键信息的单行格式,可以调整打印逻辑:

for log_item in logs:
    s = log_item['_source']
    print(f"[{s['@timestamp']}] {s['event']['action']} | 用户: {s['winlog']['event_data']['TargetUserName']} | IP: {s['winlog']['event_data']['IpAddress']}")

内容的提问来源于stack exchange,提问作者grayhydra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:07:15