2013-11-20 6 views
6

jsonスキーマを定義して、配列に含まれるオブジェクトのプロパティを制限しようとしています。jsonスキーマでanyOfおよびoneOfの要件を持つオブジェクトの配列を検証する

私がこれまで持っていることは次のとおりです。

{ 
    "things": [ 
     { 
      "name": "tabby", 
      "code": "meeow", 
      "type": "cat", 
      "value": 20 
     }, 
     { 
      "name": "k9", 
      "code": "woofer", 
      "type": "dog", 
      "rate": 15 
     } 
    ] 
} 

このjson schema validatorは有効な応答を提供するが、この検証が唯一の最初の要素に適用されているようだ:今すぐ次jsonobjを与え

{ 
    "title":"myCollection", 
    "properties":{ 
     "things":{ 
      "type":"array", 
      "items":[{ 
       "title":"thingObj", 
       "type":"object", 
       "properties":{ 
        "name":{ 
         "type":"string" 
        }, 
        "code":{ 
         "type":"string" 
        }, 
        "type":{ 
         "type":"string", 
         "enum":["dog","cat"] 
        }, 
        "rate":{ 
         "type":"number" 
        }, 
        "value":{ 
         "type":"number" 
        } 
       }, 
       "anyOf":[{ 
        "properties":{ 
         "name":{ 
          "type":"string" 
         } 
        },"required":["name"] 
       },{ 
        "properties":{ 
         "code":{ 
          "type":"string" 
         } 
        },"required":["code"] 
       },{ 
        "properties":{ 
         "type":{ 
          "type":"string", 
          "enum":["new","existing"] 
         } 
        },"required":["type"] 
       }], 
       "oneOf":[{ 
        "properties":{ 
         "rate":{ 
          "type":"number" 
         } 
        }, 
        "required":["rate"] 
       },{ 
        "properties":{ 
         "value":{ 
          "type":"number" 
         } 
        }, 
        "required":["value"] 
       }], 
       "additionalProperties":false 
      }] 
     } 
    } 
} 

アレイ。最初の要素のanyOf句またはoneOf句に含まれるすべてのフィールドを削除すると、検証は失敗します。 2番目の配列要素で同じことが目的の失敗を引き起こすことはありません。バリデーションが各アレイメンバーに対して確実に実行されるようにするにはどうすればよいですか?

答えて

13

これは、(誤って)「タプルタイピング」が使用されたためです。 "items"の値が配列で、配列内のの特定の位置のスキーマと一致する場合、これが有効になります。

"items"(スキーマ内)を単にスキーマ(スキーマの配列ではない)に変更すると、同じ方法ですべての項目が検証されます。

関連する問題