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

如何基于JSON Schema的properties数组实现动态属性校验?

动态JSON Schema验证需求

我有一个用于验证对象的Schema:

{
  "required": ["description", "type", "properties", "element", "tests"],
  "additionalProperties": true,
  "type": "object",
  "definitions": {
    "primitive": {
      "type": ["string", "number", "boolean"]
    }
  },
  "properties": {
    "error_message": { "$ref": "error_message.json" },
    "description": { "$ref": "description.json" },
    "tests": { "$ref": "tests.json" },
    "type": {
      "type": "string",
      "enum": ["object"]
    },
    "properties": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "uniqueItems": true
    },
    "element": {
      "type": "string",
      "minLength": 1
    }
  }
}

需要实现动态验证规则:

  • 输入对象中新增的所有属性必须与properties数组中指定的属性完全匹配;
  • properties数组中列出的所有属性必须全部存在于输入对象中。

示例

有效示例

{
  description: "text",
  type: "object",
  element: "something",
  tests: {
    pass: [{ "name": "John", "age": 30, "gender": "male" }],
    fail: [{ "name": "Bo", "age": 17, "gender": "thing" }]
  },
  properties: ["name", "age", "gender"],
  age: { range: { min: "1", max: "120"}},
  gender: { enum: ["male", "female"] },
  name: { range: { min: "3", max: "20" }}
}

无效示例

缺少name属性

{
  description: "text",
  type: "object",
  element: "something",
  tests: {
    pass: [{ "name": "John", "age": 30, "gender": "male" }],
    fail: [{ "name": "Bo", "age": 17, "gender": "thing" }]
  },
  properties: ["name", "age", "gender"],
  age: { range: { min: "1", max: "120"}},
  gender: { enum: ["male", "female"] }
  // 缺少name属性
}

存在多余的job属性

{
  description: "text",
  type: "object",
  element: "something",
  tests: {
    pass: [{ "name": "John", "age": 30, "gender": "male" }],
    fail: [{ "name": "Bo", "age": 17, "gender": "thing" }]
  },
  properties: ["name", "age", "gender"],
  age: { range: { min: "1", max: "120"}},
  gender: { enum: ["male", "female"] },
  // 多余的job属性
  job: { range: { min: "3", max: "20" }}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:15:27