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

如何用JSON Schema定义存储未知JSON Schema的对象属性?

问题描述

需要编写JSON Schema来约束如下结构的对象:

{
    "mySchema": {
        // 任意合法的JSON Schema
    }
}

目前已经能把mySchema定义成普通对象类型,写法如下:

{
    "type": "object",
    "properties": {
        "mySchema": {
            "type": "object"
        }
    }
}

但现在想明确约束mySchema的值必须是任意合法的JSON Schema(不是普通对象或者特定的JSON Schema),想问这个需求能不能实现,以及正确的写法是什么。另外参考了JSON Schema 2020-12核心规范,自己写了一个尝试示例,需要确认这个示例是否合法:

{
    "type": "object",
    "properties": {
        "mySchema": {
            "type": "object",
            "$schema": "https://json-schema.org/draft/2020-12/schema"
        }
    }
}
解决方案与验证
  • 需求可行性:完全可以实现,JSON Schema支持通过引用官方元Schema来验证某个值是否为合法的JSON Schema。
  • 你的尝试示例不合法:$schema是用来声明当前这个JSON Schema遵循的规范版本的关键字,它不是用来验证数据的验证关键字,把它放在mySchema的属性里,根本起不到验证该值是合法JSON Schema的作用。
  • 正确实现方式:要约束mySchema为任意合法的2020-12版本JSON Schema,得用$ref引用官方的元Schema,另外要注意JSON Schema本身可以是布尔值(true表示匹配所有数据,false表示不匹配任何数据),所以不能只限制type为object,得允许布尔类型。正确写法如下:
{
    "type": "object",
    "properties": {
        "mySchema": {
            "$ref": "https://json-schema.org/draft/2020-12/schema"
        }
    },
    "required": ["mySchema"] // 如果mySchema是必填项可以加上这一行
}

这里的$ref指向2020-12版本的元Schema,这个元Schema本身就是用来验证一个值是否为合法的2020-12 JSON Schema的,既能支持对象类型的Schema,也能支持布尔类型的Schema。

内容的提问来源于stack exchange,提问作者Luka Žitnik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:42:33