结论先说:当工具支持的对象格式发生变化时,不要直接沿用旧的输入规范,而应先确认“变化发生在哪一层”,再决定是改字段映射、改预处理脚本,还是改人工录入习惯。多数人卡住,是因为只改了最表面的格式,却没同步改校验规则和默认值。下面按可操作的顺序拆开讲。
“对象格式变化”听起来像一件事,实际至少分三层,处理方式完全不同。
url|title|canonical 这种管道分隔。status 以前填“已发布/未发布”,现在要求填 HTTP 状态码。只有语法层变化时,改预处理脚本通常就够;一旦涉及语义层,旧数据即使能通过校验,也会产生错误结果。判断方法很简单:拿一条旧数据按新规范跑一遍,如果工具不报错但输出明显不对,问题就在语义层,而不在格式本身。
不要边改边试。先选一条“已知正确”的样本对象,把它手工改成新格式,作为基准样本。之后所有调整都以这条样本能否稳定通过为准。
具体动作:把基准样本分别放进旧流程和新流程,记录两边的输出差异。如果差异只在字段顺序或空白字符,属于可自动清洗的范围;如果差异出现在数值、分类或关联关系上,说明需要改映射表,而不是改格式。
这个动作的结果会直接影响下一步:差异可自动清洗,就写进预处理脚本;差异涉及语义,就必须回到数据源补字段,脚本层面无法补救。
上面“先改映射再改格式”的顺序,在一个条件下会失效:当工具的输入校验是先整体解析、后逐字段校验时,格式错一位就会导致整批对象被拒绝,你根本看不到字段级错误。
假设某工具要求对象为 JSON 数组,每项含 id 与 value。你把旧数据直接替换字段名,但漏掉了一项的引号。结果是整批解析失败,报错只指向行号,不指向字段。此时继续调映射表是浪费时间,应先做一次最小批量试跑,比如只提交 3 到 5 条,确认解析层通过后再放大。
反过来,如果工具是逐行独立处理,一条失败不影响其他条,那你就可以用全量试跑快速定位问题行。两种行为的处理顺序相反,所以动手前要先确认工具属于哪一种。
改完输入规范后,只写一份说明文档往往不够,因为执行的人不会每次翻文档。更有效的做法是把关键约束变成可执行的校验:
这样做的结果是:格式问题在入口就被挡住,后续排查对象质量时,你面对的是内容问题而不是格式问题。下一步动作也随之明确——先看校验拦截日志,再决定是修数据还是改规范。
不是所有格式变化都值得跟进。判断依据是:新格式是否带来了旧格式无法表达的信息。
如果新格式只是换了分隔符或字段顺序,旧对象完全可以转换,跟进成本低;如果新格式要求补充旧数据里根本不存在的字段,比如关联标识或来源标记,那么要么回到采集环节补数据,要么承认这批对象不适用于新规范。
后一种情况下,继续硬套只会产生看似通过、实则无意义的输入。更稳妥的做法是保留旧对象用于旧流程,新流程从新采集开始,两者不要混用。
具体工具支持哪些格式、当前是否仍支持某种旧格式,需要以该工具的官方文档或实际试跑结果为准,不同版本之间可能存在差异。先做最小批量验证,再决定改规范还是换对象,这一步的顺序比改法本身更重要。