2016-12-11 27 views
0

に基づいて、値Iはおもちゃの3種類を定義する以下のJSONスキーマは、このjson GUI buildergithub)と共に使用されなければならない:JSONスキーマ:oneOfの

{ 
    "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 
     } 
    } 
} 

Iは、例えば、円オブジェクトを選択した場合私は出力を得ます:

{ 
    "sawObj": { 
    "radius": 0, 
    "weight": 0 
    } 
} 

私はいつもユーザーの選択したタイプを反映するように制限された値 "タイプ"を追加したいと思います。したがって、代わりにこのような何か:

{ 
    "sawObj": { 
    "type": "circle", 
    "radius": 0, 
    "weight": 0 
    } 
} 

ここで、タイプはoneOfプロパティセクションからのユーザーの選択によって自動的に決定されます。

どうすればjson-schemaでこれを行うことができますか?

答えて

0

これを行うには、列挙型の値を使用でき、その型を表す単一の値のみを許可できました。また、必要に応じて型の値を設定するので、常に自動的に 'circle'に設定されます。

"circle": { 
    "properties": { 
     "radius": { 
      "type": "integer" 
     }, 
     "weight": { 
      "type": "integer" 
     }, 
     "type": { 
      "type": "string", 
      "enum": ["circle"] 
     } 
    }, 
    "required": ["radius", "weight", "type"], 
    "additionalProperties": false 
} 

注:この解決法は理想的ではないことを指摘したいと思います。私はこれを行うより良い方法を見つけることを望んでいます。

関連する問題