2016-10-03 8 views
0

複数のオブジェクトを含む配列を持つこのjsonスキーマがあり、各オブジェクトは特定のパターンに基づいて他のオブジェクトとわずかに異なります。oneOfより前に共通のプロパティを持つことは可能ですか?

例。

[ 
    { 
    "ID": "pgID", 
    "Name": "John", 
    "Surname": "Doe", 
    "ProjectsInvolved": [ 
     "My Project", 
     "My Project 2" 
    ] 
    }, 
    { 
    "ID": "jtID", 
    "Name": "John", 
    "Surname": "Doe", 
    "WorksOn": [ 
     "Monday", 
     "Thursday" 
    ] 
    } 
] 

そのためJSONスキーマは次のようになります。

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "array", 
    "items": { 
    "oneOf": [ 
     { 
     "type": "object", 
     "properties": { 
      "ID": { 
      "type": "string", 
      "pattern": "^(pg)\\w*$" 
      }, 
      "Name": { 
      "type": "string" 
      }, 
      "Surname": { 
      "type": "string" 
      }, 
      "ProjectsInvolved": { 
      "type": "array", 
      "items": { 
       "type": "string" 
      } 
      } 
     } 
     }, 
     { 
     "type": "object", 
     "properties": { 
      "ID": { 
      "type": "string", 
      "pattern": "^(jt)\\w*$" 
      }, 
      "Name": { 
      "type": "string" 
      }, 
      "Surname": { 
      "type": "string" 
      }, 
      "WorksOn": { 
      "type": "array", 
      "items": { 
       "type": "string" 
      } 
      } 
     } 
     } 
    ] 
    }, 
    "additionalProperties": false 
} 

私の問題は、実際のJSONは同様であるが、それはより多くのアイテムを持っている、そしてより多くの時間が経過するにつれて大きく成長する態勢を整えているということです。したがって、スキーマが同一の要素NameとSurnameをグループ化し、IDと配列のみをoneOfに含めることが可能かどうか尋ねなければなりませんか?

提案スキーマのアン例:一般

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "array", 
    "items": { 
    "type": "object", 
    "properties": { 
     "Name": { 
     "type": "string" 
     }, 
     "Surname": { 
     "type": "string" 
     }, 
     "oneOf": [ 
     { 
      "ID": { 
      "type": "string", 
      "pattern": "^(pg)\\w*$" 
      }, 
      "ProjectsInvolved": { 
      "type": "array", 
      "items": { 
       "type": "string" 
      } 
      } 
     }, 
     { 
      "ID": { 
      "type": "string", 
      "pattern": "^(jt)\\w*$" 
      }, 
      "WorksOn": { 
      "type": "array", 
      "items": { 
       "type": "string" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "additionalProperties": false 
} 

答えて

1

、あなたが先行し、特別な条件の後に一般的なものを定義します。これにより、スキーマが読みやすくなり、エラーメッセージが改善されます。

この例では、 "ProjectsInvolved"が存在する場合、 "ID"は "pg"で始まり、 "WorksOn"は存在しないことが必要です。また、 "WorksOn"が存在する場合、 "ID"は "jt"で始まり、 "ProjectsInvolved"は存在できません。

oneOfまたはanyOfでも同様のことが起こる可能性がありますが、一般にはdependenciesというエラーメッセージが表示されます。

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "array", 
    "items": { 
    "type": "object", 
    "properties": { 
     "ID": { "type": "string" }, 
     "Name": { "type": "string" }, 
     "Surname": { "type": "string" }, 
     "ProjectsInvolved": { 
     "type": "array", 
     "items": { "type": "string" } 
     }, 
     "WorksOn": { 
     "type": "array", 
     "items": { "type": "string" } 
     } 
    }, 
    "dependencies": { 
     "ProjectsInvolved": { 
     "properties": { 
      "ID": { "pattern": "^(pg)\\w*$" } 
     }, 
     "not": { "required": ["WorksOn"] } 
     }, 
     "WorksOn": { 
     "properties": { 
      "ID": { "pattern": "^(jt)\\w*$" } 
     }, 
     "not": { "required": ["ProjectsInvolved"] } 
     } 
    } 
    }, 
    "additionalProperties": false 
} 
+0

ちょうど私が必要なもの!あなたの名前がJasonでJSON関連の質問に答えるだけなので、余分な+1を与えることができたらいいと思います。 :D –

関連する問題