先给结论:不要整批重写输入规范。把新旧格式当作两条并行入口,用同一份样本分别跑一遍,比较“解析失败率、字段丢失位置、人工返工点”三个可观察结果,再决定保留旧规范、改写字段映射,还是退出该工具。格式变化时最危险的动作是直接按新格式覆盖旧规则,因为旧任务里往往还有未处理完的存量数据。
“对象格式变化”至少有三种不同来源,处理方式完全不同。第一种是输入文件本身的结构变了,例如原来一行一条记录,现在变成嵌套结构;第二种是工具接受的字段类型变了,例如原来接受纯文本,现在要求结构化字段;第三种只是导出模板或接口返回的包装层变了,实际内容没变。判断方法很直接:取一个旧格式样本和一个新格式样本,分别丢进现有流程,看失败发生在读取阶段还是映射阶段。读取阶段就失败,说明是结构问题;能读进来但字段对不上,说明是映射问题;两者都正常只是下游报错,说明问题在输出端,不该动输入规范。
如果队列里还有大量旧格式数据没处理完,保留旧规范通常是更稳的选择。具体动作是给规范加一个版本标识,让新任务走新规范,旧任务继续走旧规则,而不是让一条规则同时兼容两种格式。这样做的结果是排查问题时能快速定位是哪批数据出的错。适用前提有三个:旧格式短期内不会完全消失;两套规范维护成本可接受;工具本身允许按任务指定不同的输入配置。如果工具只允许全局配置一份规范,保留旧规范就意味着新任务要额外做一次格式转换,这时要算清转换脚本的维护成本是否低于直接改写。
决定改写时,顺序很重要。先调整字段映射,让新格式的字段能对应到流程中实际使用的位置;映射跑通后,再收紧校验规则。反过来做会怎样?校验先拦住一批本来能处理的样本,你会误以为新格式不兼容,实际上只是规则太严。一个假设例子:某工具原来要求日期字段是 YYYY-MM-DD,新格式给的是带时区的时间戳。如果先改校验去接受时间戳,但映射表还按原来的位置取值,结果就是日期能通过校验、却写进了错误的字段。正确顺序是先确认时间戳该映射到哪个字段,再决定校验是否放宽。
规模化后出现例外,不等于工具不能用。把例外样本按原因分成几类:编码问题、字段缺失、嵌套层级超出预期、数值精度丢失。如果例外集中在某一类,且这类样本占比很小,可以针对该类单独写预处理,而不是推翻整套规范。如果例外分散在多个类别、且每类都要单独处理,说明新格式和工具的匹配度确实不够,这时退出比继续打补丁更划算。判断依据不是例外数量本身,而是“处理例外的规则数量是否已经超过主流程规则数量”。超过时,维护成本会持续上升。
拿二十条新格式样本和二十条旧格式样本,分别跑现有流程,记录每条在哪一步失败或产出异常。如果旧样本全部通过、新样本失败点集中在同一处,改那一处即可;如果旧样本也开始失败,说明改动影响了共用逻辑,需要回退后再分版本处理;如果新旧样本都通过但产出结果不一致,问题在映射而非格式,应优先核对字段对应关系。这个动作的结果直接决定下一步:集中失败就局部改写,分散失败就考虑退出,共用逻辑被破坏就先回退再分版本。
格式变化本身不构成换工具的理由,真正要判断的是维护两套规范的成本,和处理例外样本的规则数量是否已经失控。把这两点量化之后,保留、改写还是退出就不再是感觉问题,而是一个可以复核的决定。