2017-06-11 18 views
2

ほとんど同じ属性を持ち、いくつかの属性が異なる複数の異なるエンティティに対して検証するJSONスキーマを作成しようとしています。キーの存在を検証するためのJSONスキーマ "oneOf"

{ 
    "firstname": "Bat", 
    "lastname": "man", 
    "email": "[email protected]" 
} 

{ 
    "firstname": "Super", 
    "lastname": "man", 
    "phone": "543-453-4523" 
} 

{ 
    "firstname": "Wonderwo", 
    "lastname": "man", 
    "email": "[email protected]" 
} 

は基本的に私は、最後の名前は"man"で確認しますとphoneまたはemail属性を持ついずれかの単一のスキーマを作成します。

私はこのように、oneOfを使ってこれを実装しようとしていた。

{ 
    "properties": { 
    "firstname": { 
     "type": "string" 
    }, 
    "lastname": { 
     "type": "string", 
     "pattern": "man" 
    }, 
    "oneOf": [{ 
     "email": { 
     "type": "string" 
     }, 
     "phone": { 
     "type": "string" 
     } 
    }] 
    } 
} 

しかし、私はこの作品とは思いません。これはJSONスキーマでも可能ですか?そして私はこれをどのように達成することができますか?

答えて

2

あなたは、いくつかの問題を抱えて:

  1. 「oneOfの」プロパティ内では使用できませんで、キーワードです。
  2. "oneOf"内の項目はスキーマである必要がありますが、そこにある項目はありません。
  3. 「anyOf」あなたは本当に排他的「OR」
  4. 「パターン」を必要とする場合を除き、ほとんど常に「oneOfの」よりも優れている、ここで間違っているキーワードである、あなたは「列挙型」(またはドラフト-06「ポーラ」)が必要です

あなたが必要です:

{ 
    "type": "object", 
    "required": ["firstname", "lastname"], 
    "properties": { 
    "firstname": { 
     "type": "string" 
    }, 
    "lastname": { 
     "type": "string", 
     "enum": ["man"] 
    }, 
    "email": { 
     "type": "string" 
    }, 
    "phone": { 
     "type": "string" 
    } 
    }, 
    "anyOf": [ 
    { "required": ["email"] }, 
    { "required": ["phone"] } 
    ] 
} 
関連する問題