2017-08-14 26 views
2

jsonスキーマを作成する方法がありますか?オブジェクトの数を制限しますか? オブジェクトが一意であることを確認してください。最後に同じオブジェクトのJsonスキーマ制限番号

、私はこのJSONで

{ 
    "days": { 
    "monday": { 
    "schedule": { 
    "start_time": "23:35" 
    } 
    }, 
    "tuesday": { 
    "schedule": { 
    "start_time": "23:23" 
    } 
    } 
    } 
} 

ような何かをしたい、毎日は一度だけ発生する必要があります。 1日の開始時間と同じように。

これまでのところ、私は以下のスキーマで試しましたが、まったく成功しませんでした。 このスキーマでは、私はjsonに複数の "monday"オブジェクトを持つことができ、スキーマはまだ有効です。しかし、私が探しているのは、複数のオブジェクトに対して有効ではないスキーマです。

{ 
    "$schema": "http://json-schema.org/schema#", 
    "title": "DayScheduler", 
    "type": "object", 
    "required": [ 
    "days" 
    ], 
    "properties": { 
    "days": { 
     "monday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "tuesday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "wednesday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "thursday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "friday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "saturday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "sunday": { 
     "$ref": "#/definitions/scheduler" 
     } 
    } 
    }, 
    "definitions": { 
    "scheduler": { 
     "type": "object", 
     "required": [ 
     "schedule" 
     ], 
     "properties": { 
     "schedule": { 
      "type": "object", 
      "required": [ 
      "start_time" 
      ], 
      "properties": { 
      "start_time": { 
       "type": "string", 
       "pattern": "^([01]?[0-9]|2[0-3]):[0-5][0-9]" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

これをjson-schemaで実現する方法はありますか?

+0

*全く成功していない* - どのように成功していないのですか?検証は期待どおりに動作しませんか?あなたはエラーが発生しますか?何? –

+0

私の質問が更新されました。 このスキーマでは、私はjsonに複数の "monday"オブジェクトを持つことができ、スキーマはまだ有効です。しかし、私が探しているのは、複数のオブジェクトに対して有効ではないスキーマです。 – pan

答えて

0

JSONでの私の経験から、同じキーを持つ複数のオブジェクトがある場合は、最後のキーの値がキーのために取られることを理解しています。 あなたのスキーマに

{ 
    "name": name, 
    type: object, 
    properties: { 
     a:b, 
     c:d 
    }, 
    "additionalProperties": false 
} 

を追加してみてください可能性がありますが、私はまだ、各キーの最後に出現するが値として取られると思います。

+0

私はどこに "additionalProperties"を置くべきか分かりません。数字を制限するにはfalseです。あなたはどこに置くのですか? – pan

+0

@pan例を使って説明するために私の答えを編集しました。私はそれが許可された型の複数の出現を防ぐことはあまり確かではない。 –

1

JSONでは重複キーは使用できません。 JSONスキーマは、JSONデータを検証するために設計されています。有効なJSONではないデータを検証する機能はありません。

この例は、これがなぜ有効でないのかを説明するのに役立ちます。あなたはJavaScriptオブジェクトとしてこれを評価し、このオブジェクトのfooプロパティにアクセスしようとした場合

var value = { 
    "foo": 1, 
    "foo": 2 
} 

value.foo === ???を、それが1または2のですか?あいまいです。

関連する問題