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

含公共属性且部分属性差异的对象JSON Schema写法是否正确?

结论

你的Schema写法不正确,既存在基础语法错误,也没有实现「公共属性复用+差异化属性扩展」的设计目标。

存在的具体问题
  • 结构层级错误:"type": "object"和"properties"节点被错误放在和definitions平级的位置,缺少根Schema对象包裹,不符合JSON Schema的基本结构要求。
  • 公共属性定义错误:media-content下的title、related-media业务属性没有放在properties节点内,直接和type平级会被识别为Schema元配置字段,不会生效为业务属性校验规则。
  • 字段类型声明错误:type字段的定义里用"format": "string"声明类型是语法错误,format是用于补充格式约束(如uri、email)的关键字,声明基础类型必须用"type": "string"。
  • 复用逻辑错误:当前写法把media-content作为category字段的类型引用,并没有实现「多个对象共享公共属性、同时持有差异化属性」的继承效果。

正确实现参考

如果你的需求是让不同类型的媒体对象(音频、视频等)复用media-content的公共属性,同时各自扩展独有属性,应该用allOf做Schema组合、oneOf做类型分流,示例代码如下:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "media-content": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "related-media": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "required": ["title"]
    }
  },
  "oneOf": [
    {
      // 视频类型:继承公共属性 + 独有属性
      "allOf": [
        { "$ref": "#/definitions/media-content" },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "video"
            },
            "format": {
              "type": "string",
              "enum": ["mp4", "mov", "mkv"]
            }
          }
        }
      ]
    },
    {
      // 音频类型:继承公共属性 + 独有属性
      "allOf": [
        { "$ref": "#/definitions/media-content" },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "audio"
            },
            "bitrate": {
              "type": "number"
            }
          }
        }
      ]
    }
  ]
}

如果你的业务逻辑确实是category字段的值为media-content类型对象,只需要修正前3个语法错误即可,不需要用组合继承的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:15:59