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

如何在JSON Schema中验证payload属性为合法JSON Schema?

验证属性为合法JSON Schema的定义方法

需求背景

需要验证payload属性是一个合法的JSON Schema,示例的message结构如下:

message:
  name: userSignedUp
  version: 1.0.0
  payload:
    name:
      type: string
    timestamp:
      type: string
    warningLevel:
      type: string
      enum:
        - HIGH
        - MEDIUM
        - LOW

现有问题

用户编写的JSON Schema中,payload引用了未正确定义的#/definitions/schema,代码如下:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "title": "Message",
  "properties": {
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "payload": {
      "$ref": "#/definitions/schema"
    }
  },
  "definitions":{
    "schema": {
     # --> How should the schema be defined?
    }
  },
  "required":[
    "name",
    "version",
    "payload"
  ]
}

用户知晓需使用Core/Validation Dialect元Schema,但不清楚meta/*该替换什么,想了解#/definitions/schema的正确定义方式。


解决方案

要定义验证“合法JSON Schema”的Schema,核心是引用对应JSON Schema版本的元Schema(即描述Schema本身规则的Schema)。以下是针对Draft-07版本的两种实现方式:

方法1:直接引用元Schema

这是最简洁的方式,直接让schema定义指向Draft-07的元Schema,就能确保payload符合合法JSON Schema的规范:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "title": "Message",
  "properties": {
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "payload": {
      "$ref": "#/definitions/schema"
    }
  },
  "definitions":{
    "schema": {
      "$ref": "http://json-schema.org/draft-07/schema#"
    }
  },
  "required":[
    "name",
    "version",
    "payload"
  ]
}

方法2:基于元Schema扩展自定义约束

如果需要在合法Schema的基础上添加额外规则(比如强制某些关键字必须存在),可以在引用元Schema的同时追加自定义约束:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "title": "Message",
  "properties": {
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "payload": {
      "$ref": "#/definitions/schema"
    }
  },
  "definitions":{
    "schema": {
      "$ref": "http://json-schema.org/draft-07/schema#",
      "required": ["type"] // 强制payload的Schema必须包含type关键字
    }
  },
  "required":[
    "name",
    "version",
    "payload"
  ]
}

版本适配说明

如果使用其他JSON Schema版本(如Draft-2020-12),只需将元Schema的URL替换为对应版本的地址即可,例如https://json-schema.org/draft/2020-12/schema。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:32:35