2017-07-20 7 views
0

状況は、次のされているオブジェクトにオブジェクトを定義する方法:JSONスキーマ - 再帰

1)オブジェクトでは、私は、「文字列」、「アレイ」または別の「オブジェクト」を持つことができます。

2.)「配列」には「文字列」のみを含めることができます。私は

問題は今だけの文字列またはアレイかかわらず(あるいはそれ以上のネストされたオブジェクト)を有することができるオブジェクト内のオブジェクトを持つことができることを意味

3)「オブジェクト」1を含むことができます)その1.)と2.)は動作しますが、 "オブジェクトを取得するために" $ ref "を追加するとすぐに)検証サーバーがスタックオーバーフローでクラッシュします。

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "object", 
    "properties": { 
    "value": { 
     "oneOf": [ 
     { 
      "type": "string" 
     }, 
     { 
      "type": "array", 
      "items": { 
      "type": "string" 
      } 
     }, 
     { 
      "type": "object", 
      "patternProperties": { 
      ".*": { 
       "$ref": "#/properties/value" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

"$ref": "#/properties/value"は私のコードを壊します。

これを動作させるにはどうすればよいですか?

答えて

1

自分で修正しました。 "$ref": "#/properties/value""$ref": "#/properties"

に変更する必要があります。#/プロパティは、これらのオブジェクトの内部では、値のプロパティだけが私の望むものではないと考えていました。私は "価値"の内容を持っていたかったので、一歩進んだ。

"$ref": "#/properties"のように見えるのは、「値」のみが「値」のプロパティのみを意味するという意味ではありません。

+0

"#/ properties"は空のスキーマです。 "value"は検証キーワードではありません。あなたが必要とするのは(おそらく) "$ ref"です: "#"。 – esp

+0

また、 '' patternProperties ":{"。* ":}'は '' additionalProperties ":'と同じです。 – esp