以下の特定のスキーマでは、少なくとも1つのプロパティに値が含まれていることを確認できます(つまり、minLengthは1です)。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"fundRaiseId": {
"type": "string"
},
"productTypeId": {
"type": "string"
},
"businessLineId": {
"type": "string"
}
}
}
したがって、これは検証に合格します。
{
"fundRaiseId": "x"
}
そして、値が存在しないため、これは失敗します。
{
"fundRaiseId": "",
"productTypeId": "",
"businessLineId": ""
}
私は何かを試してみます
{
"allOf": [{
"type": "object",
"properties": {
"fundRaiseId": {
"type": "string"
},
"productTypeId": {
"type": "string"
},
"businessLineId": {
"type": "string"
}
}
}, {
"anyOf": [{
"properties": {
"fundRaiseId": {
"$ref": "#/definitions/nonEmptyString"
}
}
}, {
"properties": {
"productTypeId": {
"$ref": "#/definitions/nonEmptyString"
}
}
}, {
"properties": {
"businessLineId": {
"$ref": "#/definitions/nonEmptyString"
}
}
}]
}],
"definitions": {
"nonEmptyString": {
"type": "string",
"minLength": 1
}
}
}
説明:検証されるJSONは、2つのルートレベルのスキーマに準拠する必要があります。1つは元の定義(3つの文字列プロパティ)です。もう1つは3つの追加のサブスキーマを含み、それぞれが空でない文字列として元のプロパティの1つを定義します。これらは「anyOf」スキーマでラップされているため、これらの少なくとも1つと元のスキーマが一致する必要があります。
値を空にすることを許可する必要がありますか?すべての文字列が空でないことを要求する場合は、よりすっきりしたスキーマを作成できます。
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"fundRaiseId": { "$ref": "#/definitions/non-empty-string" },
"productTypeId": { "$ref": "#/definitions/non-empty-string" },
"businessLineId": { "$ref": "#/definitions/non-empty-string" }
},
"anyOf": [
{ "required": ["fundRaiseId"] },
{ "required": ["productTypeId"] },
{ "required": ["businessLineId"] }
],
"definitions": {
"non-empty-string": {
"type": "string",
"minLength": 1
},
}
}