有一些json。
{
"headerInfo": {
"id": 50
"characteristics": [
{
"id": "123456789",
"type": "float",
"multiValued": false,
"numberDecimals": 6,
"length": 10,
"caseSensitive": false,
"entryFieldMask": "_,___.______",
"unitOfMeasure": "P1",
"additionalValues": true
},
{
"id": "15151511",
"type": "float",
"multiValued": false,
"numberDecimals": 0,
"possibleValues": [
{
"valueLow": "60",
"intervalType": "1"
},
{
"valueLow": "80",
"intervalType": "1"
}
],
"length": 3,
"caseSensitive": false,
"entryFieldMask": "___",
"unitOfMeasure": "P1",
"additionalValues": false
},
{
"id": "489481561",
"type": "string",
"multiValued": false,
"possibleValues": [
{
"id": "A"
}
{
"id": "§"
}
],
"length": 1,
"caseSensitive": true,
"entryFieldMask": "",
"additionalValues": false,
"reference": {
"name": "ghnfgjghjghk",
"writable": false
}
},
{
"id": "4616616161",
"type": "date",
"multiValued": false,
"length": 10,
"caseSensitive": false,
"entryFieldMask": "DD.MM.YYYY",
"additionalValues": true,
"reference": {
"name": "bfhwbvbjewbv",
"writable": false
}
}
]
}
如何使用以下条件生成json schema:
- “reference”和“possibleValues”属性是可选的。
- 如果“type”属性等于“float”值,则需要“numberDecimals”属性,否则不需要。
我尝试使用anyOf实现这一点,但在这种情况下,anyOf中的所有内容都没有被正确验证,尽管在postman中验证是成功的。
2条答案
按热度按时间2exbekwf1#
Jeremy的回答很有帮助,但还需要进一步完善,即在oneOf中添加“required”属性。以下是最终结果:
7eumitmz2#
您可以将
if, then
语法用于JSON Schema draft-07或更新版本。jist是你定义整个模式,然后在你想要定义
required
属性的对象模式中,你添加if, then
语法来检查值是否匹配条件,然后分配then
约束。在你的例子中,我们检查
if
,type
的常数值是float
,如果为真,则为required:["numberDecimals"]