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

JSON数据过滤异常:过滤后output.json为空问题求助

JSON数据过滤异常排查与解决方法

常见问题排查方向

  • 大小写匹配问题:过滤规则里的词汇(比如zonedentr、modifier sl)如果和JSON中message字段的实际大小写不一致(比如JSON里是ZonedEntr或Modifier SL),会直接导致匹配失败,建议改成不区分大小写的匹配逻辑。
  • 空格/特殊字符干扰:比如规则里的fermer le trade,若JSON文本是fermer le trade(多空格)或带标点(fermer le trade.),普通字符串匹配会失效,需用正则做模糊匹配。
  • 正则语法错误:如果代码里用了正则,可能存在转义错误、分组逻辑错误,导致所有内容都无法匹配。
  • JSON结构问题:确认原始JSON是数组格式,且每个对象都存在message字段,避免因字段缺失导致过滤逻辑误判。

修正后的示例代码

import json
import re

# 定义匹配规则的正则表达式,忽略大小写
pattern1 = re.compile(r'(vente|sell|achat|buy).*zonedentr', re.IGNORECASE)
pattern2 = re.compile(r'(pipsclture|pipscloture|pipclture|pipcloture)', re.IGNORECASE)
pattern3 = re.compile(r'fermer(?:ez)? le trade', re.IGNORECASE)
pattern4 = re.compile(r'modifier sl', re.IGNORECASE)

def filter_valid_items(item):
    message = item.get('message', '')
    # 检查任一条件是否满足
    return (pattern1.search(message) or 
            pattern2.search(message) or 
            pattern3.search(message) or 
            pattern4.search(message))

# 读取原始数据
with open('input.json', 'r', encoding='utf-8') as f:
    raw_data = json.load(f)

# 执行过滤
filtered_data = [item for item in raw_data if filter_valid_items(item)]

# 写入结果
with open('output.json', 'w', encoding='utf-8') as f:
    json.dump(filtered_data, f, ensure_ascii=False, indent=2)

关键优化点

  • 启用不区分大小写匹配(re.IGNORECASE),规避大小写差异导致的匹配失效。
  • 用.*处理词汇间的任意字符,兼容空格、标点等干扰项。
  • 用item.get('message', '')处理缺失message字段的对象,避免代码报错。
  • 合并相似规则的正则表达式,简化逻辑同时提升匹配效率。

验证步骤

  1. 从原始JSON中提取几个符合条件的message字段,单独用正则测试是否能匹配成功。
  2. 运行代码前,打印len(raw_data)和len(filtered_data),查看过滤前后的数据量变化,定位是完全无匹配还是匹配数量过少。
  3. 检查JSON文件编码是否为UTF-8,避免读取时乱码导致匹配失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:09:40