首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON-schema:基于oneOf的值

JSON-schema:基于oneOf的值
EN

Stack Overflow用户
提问于 2016-12-12 02:34:38
回答 1查看 265关注 0票数 0

我有下面的json-schema,它定义了3种类型的玩具,用于这个json GUI builder (github):

代码语言:javascript
复制
{
    "id": "http://some.site.somewhere/entry-schema#",
    "$schema": "http://json-schema.org/draft-04/schema#",
    "description": "schema for toys in game",
    "type": "object",
    "required": [ "type" ],
    "properties": {
        "sawObj": {
            "type": "object",
            "oneOf": [
                { "$ref": "#/definitions/rect" },
                { "$ref": "#/definitions/circle" },
                { "$ref": "#/definitions/img" }
            ]
        }
    },
    "definitions": {
        "rect": {
            "properties": {
                "width": { "type": "integer" },
                "height": { "type": "integer" },
                "weight": { "type": "integer" }
            },
            "required": [ "width", "height", "weight" ],
            "additionalProperties": false
        },
        "circle": {
            "properties": {
              "radius": { "type": "integer" },
              "weight": { "type": "integer" }
            },
            "required": [ "radius", "weight" ],
            "additionalProperties": false
        },
        "img": {
            "properties": {
              "path": { "type": "string" },
              "width": { "type": "integer" },
              "height": { "type": "integer" },
              "weight": { "type": "integer" }
            },
            "required": [ "path", "width", "height", "weight" ],
            "additionalProperties": false
        }
    }
}

例如,如果我选择circle对象,我会得到一个输出:

代码语言:javascript
复制
{
  "sawObj": {
    "radius": 0,
    "weight": 0
  }
}

我想添加一个值" type“,它总是被约束以反映用户选择的类型。所以取而代之的是:

代码语言:javascript
复制
{
  "sawObj": {
    "type": "circle",
    "radius": 0,
    "weight": 0
  }
}

其中类型由oneOf属性部分中的用户选择自动确定。

如何使用json-schema完成此操作?

EN

回答 1

Stack Overflow用户

发布于 2016-12-12 03:04:36

我可以通过枚举值来实现这一点,并且只允许使用单个值来表示类型。我还根据需要设置了类型值,以便始终将其自动设置为“circle”。

代码语言:javascript
复制
"circle": {
    "properties": {
        "radius": {
            "type": "integer"
        },
        "weight": {
            "type": "integer"
        },
        "type": {
            "type": "string",
            "enum": ["circle"]
        }
    },
    "required": ["radius", "weight", "type"],
    "additionalProperties": false
}

注意:我想指出这个解决方案并不理想。我希望能找到一种更好的方法来做这件事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41089620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档