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

如何正确设置JSON Schema属性使其本身为JSON Schema对象?

正确声明属性为JSON Schema对象的方法

你的核心思路其实是对的,但可能需要几个细节的澄清和优化。下面一步步帮你梳理:

为什么你的代码其实是可行的?

通过$ref引用JSON Schema的元schema(也就是专门描述JSON Schema本身的schema),是声明某个属性必须是合法JSON Schema对象的标准方式。你用的http://json-schema.org/draft-07/schema#确实是draft-07版本元schema的正确地址,这段代码在语法上完全没问题。

如果你觉得它“有误”,大概率是因为你的JSON Schema验证器默认没有自动加载远程的元schema,导致验证时出现报错。这种情况下,你需要手动配置验证器来加载这个元schema,或者将元schema的内容本地导入(不过后者会让你的schema变得非常冗长,不推荐)。

优化后的代码示例

可以给外层对象加上additionalProperties: false,确保不会出现多余的未定义属性,让schema更严谨:

{
  "type": "object",
  "description": "Describe request/response",
  "properties": {
    "requestSchema": {
      "$ref": "http://json-schema.org/draft-07/schema#"
    },
    "replySchema": {
      "$ref": "http://json-schema.org/draft-07/schema#"
    }
  },
  "additionalProperties": false
}

关于Hyper Schema的疑问

Hyper Schema是JSON Schema的扩展,主要用于描述RESTful API的链接、交互规则等场景,和你现在“声明某个属性是JSON Schema对象”的需求完全不相关。你不需要在这里用到它,用普通的元schema引用就足够解决问题。

额外提示(如果用新版本JSON Schema)

如果你使用的是2020-12或更新版本的JSON Schema,元schema的地址会变成https://json-schema.org/draft/2020-12/schema,写法类似:

"requestSchema": {
  "$ref": "https://json-schema.org/draft/2020-12/schema"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:03