用途
csv-to-json-validator 是一个数据管道(data-pipeline)技能,用于按声明的 schema 校验 CSV 输入,并产出结构化的 JSON 数组,同时保留每一行的错误信息。
主要能力
- 逐行校验:对每一列依次检查类型、必填/可空、以及约束(min、max、regex、enum 取值)。
- 收集错误:每行会收集全部错误而不提前短路;若某行存在至少一个硬错误,则记入 errors 并继续处理。
- 结构化输出:输出按原顺序排列的已校验 JSON 数组、独立的 errors 数组({row_index, column, code, message})以及汇总({total_rows, valid_rows, invalid_rows, column_coverage})。
- 退出码:invalid_rows 为 0 时退出 0,否则退出 1,便于脚本消费。
- 支持的类型:string、int、float、bool、iso-date、email、url、enum。
使用方式
- schema 为 YAML 或 JSON 对象,映射“列 → 类型 + 约束”。
- 输入为 UTF-8、RFC 4180 的 CSV。
- 模式路由:用户说“validate this csv”“check schema”进入 VALIDATE-ONLY;“convert csv to json”“csv → json”进入 CONVERT;“validate and convert”进入 FULL(默认)。
- FULL 工作流:解析 CSV(超过 10 MB 中止,MaxSizeExceeded)→ 加载 schema → 逐行校验 → 输出数据、错误与汇总。
适用场景
- 拥有来自不可信来源(用户上传、第三方导出)的表格输入,需要向下游系统交付结构化数据。
- 使用者包括数据工程师、后端开发、数据 QA。
限制与边界
- 不适用于自由文本/非结构化文本(应使用解析器)、二进制格式,以及大于 10 MB 的流式用例(本技能受限于内存内处理)。
- 不用于 Excel(.xlsx),应在上游使用专门的 xlsx 读取器。
- 不用于 JSON Lines 或 NDJSON,输入格式仅为规范 CSV。
- 不用于“尽力而为”的解析与类型强制转换:schema 不匹配必须显式失败。
错误处理
- 文件 > 10 MB:中止,MaxSizeExceeded。
- 非 UTF-8 / 非法 CSV:中止,FormatError。
- schema 不可解析:中止,SchemaError。
- schema 中的列在 CSV 中缺失:警告,继续并以 null 处理。
- CSV 中不在 schema 内的列:警告,从输出中丢弃(在汇总中报告)。
- 行级类型不匹配:记入 errors[],不纳入输出。
- CSV 中重复列名:中止,AmbiguousHeader。
安全基线
- 提示注入(ASI02):CSV 单元格可能含有 =SUM(...) 公式注入载荷;数据以 JSON 字符串输出,绝不作为公式。
- 敏感信息泄露(ASI07):不在 INFO 级别记录完整行内容;对匹配 PII 正则的字段进行脱敏。
- 路径遍历(CWE-22):拒绝包含 .. 或在声明工作区之外的绝对路径的输入路径。
示例
用户(英文):“Validate orders.csv against orders-schema.yaml and emit JSON.” 用户(中文):“按 orders-schema.yaml 校验 orders.csv 并输出 JSON。”(输出结构相同;message 字段可按 language 切换为中文。)
测试用例
- 合法的 10 行 CSV → 全部通过,0 错误。
- 10 行中有 5 行某列类型错误 → 收集 5 个错误,输出 5 个有效行。
- 缺失必填列 → 警告并以 null 继续。
- 公式注入(=CMD("rm -rf ~"))→ 作为字面字符串输出,不执行。
- 20 MB 文件 → 在解析前立即中止。