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

使用readlines后调用json.loads报错及换行符处理疑问

解决UFW日志处理的JSON解析错误

1. 第一个错误:TypeError: the JSON object must be str, bytes or bytearray, not generator

  • 原因:json.loads() 仅接受单个字符串/字节对象,你传入的生成器表达式(x.strip("\n") for x in data)类型不匹配。
  • 修复逻辑:若要逐行解析,必须循环遍历每行,对每个单独的字符串调用json.loads();若日志文件是完整JSON数组格式,直接读取整个文件内容再解析即可。

2. 第二个错误:JSONDecodeError: Expecting value: line 1 column 1 (char 0)

  • 核心原因:UFW默认生成的日志是syslog格式的纯文本,并非JSON格式,直接用json.loads()解析必然失败。
  • 验证方式:打印一行处理后的内容确认:
    with open('ufw.txt', 'r') as f:
        first_line = f.readline().strip()
        print(first_line)
    
    输出会是类似这样的非JSON文本:

    Jun 10 12:34:56 myhost ufw[12345]: [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff SRC=192.168.1.100 DST=192.168.1.200 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=54321 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0

正确处理UFW日志的方法

方法1:手动解析文本字段

通过正则拆分日志中的键值对:

import re

def parse_ufw_log(line):
    # 提取动作类型(如BLOCK/ALLOW)
    action_match = re.search(r'\[UFW (\w+)\]', line)
    action = action_match.group(1) if action_match else None
    
    # 提取所有键值对(如IN=eth0、SRC=192.168.1.1)
    kv_pairs = re.findall(r'(\w+)=([^\s]+)', line)
    log_data = dict(kv_pairs)
    if action:
        log_data['action'] = action
    return log_data

# 批量处理日志文件
parsed_logs = []
with open('ufw.txt', 'r') as f:
    for line in f:
        stripped_line = line.strip()
        if not stripped_line:  # 跳过空行
            continue
        parsed = parse_ufw_log(stripped_line)
        parsed_logs.append(parsed)

# 查看解析结果
print(parsed_logs[0])

方法2:使用第三方库简化解析

安装ufw-log-parser库后直接调用解析方法:

pip install ufw-log-parser
from ufw_log_parser import parse_log_line

parsed_logs = []
with open('ufw.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if line:
            parsed = parse_log_line(line)
            parsed_logs.append(parsed)

换行符处理建议

  • 用line.strip()可一次性去除每行首尾的换行符、空格等空白字符;
  • 若仅需去掉换行符,用line.rstrip('\n')更精准(不会误删开头的空格)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:29:36