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

CSV导入JSON Schema:块可选配置与无表头条件验证问题

CSV 导入用 JSON Schema 优化方案

一、调整001/002体块的合法性规则

你当前的Schema要求同时存在001和002体块,要改成仅存其中一类也合法,只需用anyOf替代原来同时校验两个contains的逻辑:

{
  "type": "array",
  "items": { "type": "array" },
  "required": [0, -1], // 强制头块(第0行)和尾块(最后一行)存在
  "allOf": [
    { "properties": { "0": { "const": ["000"] } } }, // 验证头块是000
    { "properties": { "-1": { "const": ["999"] } } }, // 验证尾块是999
    // 核心调整:只要存在001或002其中一种体块就合法
    {
      "anyOf": [
        { "contains": { "items": { "0": { "const": "001" } } } },
        { "contains": { "items": { "0": { "const": "002" } } } }
      ]
    }
  ]
}

anyOf会允许数组中存在001、002,或者两者同时存在的情况,完全符合你的需求。

二、实现无表头列的条件验证

因为CSV没有表头,直接用数组索引定位列(注意:JSON数组索引从0开始,第N列对应索引N-1)。用if-then规则实现“第5列值为C时第4列必须为日期”的逻辑:

{
  "type": "array",
  "items": {
    "type": "array",
    "if": {
      "properties": {
        "4": { "const": "C" } // 匹配第5列(索引4)值为C的行
      },
      "required": [4] // 确保第5列存在,避免空行干扰
    },
    "then": {
      "properties": {
        "3": { "format": "date" } // 强制第4列(索引3)为日期格式
      },
      "required": [3] // 确保第4列不为空
    }
  }
}

如果你的验证工具对format: date支持有限,可以用pattern替换,比如匹配YYYY-MM-DD格式:

"3": { "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }

完整整合后的Schema

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "array",
  "items": {
    "type": "array",
    // 行级条件验证规则
    "if": {
      "properties": {
        "4": { "const": "C" }
      },
      "required": [4]
    },
    "then": {
      "properties": {
        "3": { "format": "date" }
      },
      "required": [3]
    }
  },
  "allOf": [
    // 头块验证
    {
      "properties": {
        "0": {
          "type": "array",
          "items": { "0": { "const": "000" } }
        }
      },
      "required": [0]
    },
    // 尾块验证
    {
      "properties": {
        "-1": {
          "type": "array",
          "items": { "0": { "const": "999" } }
        }
      },
      "required": [-1]
    },
    // 体块合法性规则
    {
      "anyOf": [
        { "contains": { "items": { "0": { "const": "001" } } } },
        { "contains": { "items": { "0": { "const": "002" } } } }
      ]
    }
  ]
}

注意事项

  • 确认列索引:如果你的业务中列是从1开始计数,务必对应好JSON数组的索引(第N列→索引N-1),避免验证错误。
  • 日期格式兼容性:部分轻量验证工具可能不支持format: date,用pattern匹配具体格式更稳妥。
  • 多实例支持:contains关键字天然支持匹配多个符合条件的行,满足001/002体块多实例的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:15:33