オブジェクトのjsonスキーマ配列にrequired
を設定する方法を理解しようとしています。 required
プロパティは、配列ではなくオブジェクトで正常に機能します。
これが私のjsonスキーマの項目の一部です。
"items": {
"type": "array",
"properties": {
"item_id": {"type" : "number"},
"quantity": {"type": "number"},
"price": {"type" : "decimal"},
"title": {"type": "string"},
"description": {"type": "string"}
},
"required": ["item_id","quantity","price","title","description"],
"additionalProperties" : false
}
これが私が送信しているjson配列です。これらの項目で説明を渡していないため、json検証は失敗するはずです。
"items": [
{
"item_id": 1,
"quantity": 3,
"price": 30,
"title": "item1 new name"
},
{
"item_id": 1,
"quantity": 16,
"price": 30,
"title": "Test Two"
}
]
this validator を使用して、items
という名前のオブジェクト内の配列要素のスキーマの一部をネストすることで機能しました。スキーマには2つのネストされたitems
フィールドがありますが、それはJSONSchemaのキーワードと、JSONに実際にitems
というフィールドがあるためです。
JSONSchema:
{
"type":"object",
"properties":{
"items":{
"type":"array",
"items":{
"properties":{
"item_id":{
"type":"number"
},
"quantity":{
"type":"number"
},
"price":{
"type":"number"
},
"title":{
"type":"string"
},
"description":{
"type":"string"
}
},
"required":[
"item_id",
"quantity",
"price",
"title",
"description"
],
"additionalProperties":false
}
}
}
}
JSON:
{
"items":[
{
"item_id":1,
"quantity":3,
"price":30,
"title":"item1 new name"
},
{
"item_id":1,
"quantity":16,
"price":30,
"title":"Test Two"
}
]
}
説明フィールドの欠落に関する2つのエラーの出力:
[ {
"level" : "error",
"schema" : {
"loadingURI" : "#",
"pointer" : "/properties/items/items"
},
"instance" : {
"pointer" : "/items/0"
},
"domain" : "validation",
"keyword" : "required",
"message" : "missing required property(ies)",
"required" : [ "description", "item_id", "price", "quantity", "title" ],
"missing" : [ "description" ]
}, {
"level" : "error",
"schema" : {
"loadingURI" : "#",
"pointer" : "/properties/items/items"
},
"instance" : {
"pointer" : "/items/1"
},
"domain" : "validation",
"keyword" : "required",
"message" : "missing required property(ies)",
"required" : [ "description", "item_id", "price", "quantity", "title" ],
"missing" : [ "description" ]
} ]
上記を here に貼り付けて、同じ出力が生成されることを確認してください。
多分あなたのバリデータはJSONSchema v3のみをサポートしていますか?
required
の動作方法は、v3とv4の間で変更されました。
required
はブール値です: http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.7required
は文字列の配列です(例のように): http://tools.ietf.org/html/draft-fge-json-schema-validation-00#section- 5.4.これは古いスレッドであることに気づきましたが、この質問はjsonschema.netからリンクされているため、次の点に注目する価値があると思いました...
元の例の問題は、配列の「アイテム」を宣言するのではなく、「配列」タイプの「プロパティ」を宣言してから、配列に入力する「オブジェクト」タイプ(「プロパティ」を使用)を宣言することです。元のスキーマスニペットの改訂版は次のとおりです。
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item_id": {"type" : "number"},
"quantity": {"type": "number"},
"price": {"type" : "decimal"},
"title": {"type": "string"},
"description": {"type": "string"}
},
"required": ["item_id","quantity","price","title","description"],
"additionalProperties" : false
}
}
混乱を避けるために、配列の名前に「項目」という用語を使用しないことをお勧めしますが、それを妨げるものは何もありません...