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

如何编写支持两个对象和一个布尔值校验的JSON Schema?

首先你原有写法的核心问题有两个:

  • 同一个JSON Schema对象中不能重复声明type、description等同名key,后声明的会直接覆盖前面的定义,完全无法实现多规则校验
  • JSON Schema中布尔类型的取值是boolean,不是bool

接下来根据你实际的校验需求,分两种常见场景给修正代码:

场景1:校验顶层对象包含2个嵌套对象字段+1个布尔字段(最常用场景)

如果你要校验的目标JSON结构如下示例:

{
  "firstObject": {
    "personId": "123456",
    "code": "abc"
  },
  "secondObject": {
    "name": "张三张三",
    "code2": "def"
  },
  "yeahOrNay": true
}

对应的C# Schema定义代码如下:

string schemaJson = @"{
  'description': '包含两个对象和一个布尔值的顶层结构校验',
  'type': 'object',
  'properties': {
    'firstObject': {
      'description': '第一个嵌套对象',
      'type': 'object',
      'properties': {
        'personId': { 'type': 'string', 'minLength': 6 },
        'code': { 'type': 'string', 'minLength': 3 }
      },
      'required': [ 'personId', 'code' ]
    },
    'secondObject': {
      'description': '第二个嵌套对象',
      'type': 'object',
      'properties': {
        'name': { 'type': 'string', 'minLength': 6 },
        'code2': { 'type': 'string', 'minLength': 3 }
      },
      'required': [ 'name', 'code2' ]
    },
    'yeahOrNay': {
      'description': '布尔值字段',
      'type': 'boolean'
    }
  },
  'required': [ 'firstObject', 'secondObject', 'yeahOrNay' ]
}";

JSchema schema = JSchema.Parse(schemaJson);

场景2:校验的目标值可以是「第一个对象/第二个对象/布尔值」三种类型任意一种

如果你的需求是待校验的JSON可以是三种合法形式中的任意一种,使用anyOf关键字实现:

string schemaJson = @"{
  'description': '三种合法类型任意一种的校验',
  'anyOf': [
    {
      'description': '第一个对象',
      'type': 'object',
      'properties': {
        'personId': { 'type': 'string', 'minLength': 6 },
        'code': { 'type': 'string', 'minLength': 3 }
      },
      'required': [ 'personId', 'code' ]
    },
    {
      'description': '第二个对象',
      'type': 'object',
      'properties': {
        'name': { 'type': 'string', 'minLength': 6 },
        'code2': { 'type': 'string', 'minLength': 3 }
      },
      'required': [ 'name', 'code2' ]
    },
    {
      'description': '布尔值',
      'type': 'boolean'
    }
  ]
}";

JSchema schema = JSchema.Parse(schemaJson);

补充:allOf的适用场景

你提到的allOf关键字适用于待校验的对象需要同时满足多个Schema规则的场景,比如同一个对象既要包含personId、code字段,又要包含name、code2字段,就可以把两个对象的Schema放到allOf的数组里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:15:06