Arrays 在json模式中生成具有适当错误消息的条件数组的最佳方法
我想在JSON模式中约束一个(元组)数组,并获得适当的错误消息,但到目前为止我没有成功 数组由两个项组成,第一个是字符串,第二个是对象。对象中允许/需要的属性取决于字符串。 2个有效的例子是:Arrays 在json模式中生成具有适当错误消息的条件数组的最佳方法,arrays,tuples,jsonschema,json-schema-validator,Arrays,Tuples,Jsonschema,Json Schema Validator,我想在JSON模式中约束一个(元组)数组,并获得适当的错误消息,但到目前为止我没有成功 数组由两个项组成,第一个是字符串,第二个是对象。对象中允许/需要的属性取决于字符串。 2个有效的例子是: { "color": [ "white", { "a white property": 42 }] } 及 作为参考,typescript中的类型将定义为: type MyObject = { color: | ["white", { "a white prope
{
"color": [ "white", { "a white property": 42 }]
}
及
作为参考,typescript中的类型将定义为:
type MyObject = {
color:
| ["white", {
"a white property": number
}]
| ["black", {
"this is a black property": string
}]
}
我尝试了“oneOf”(见下文),它可以工作,但如果文件无效,错误消息将无法理解。
您可以在jsonschemavalidator.org上尝试此实例:
{
"color": [ "black", {
"XXX": "foo"
}]
}
我的尝试:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/root.json",
"type": "object",
"required": [
"color"
],
"properties": {
"color": {
"oneOf": [
{
"type": "array",
"items": [
{
"enum": [ "white"]
},
{
"type": "object",
"required": [ "a white property" ],
"additionalProperties": false,
"properties": {
"a white property": {
"type": "number"
}
}
}
]
},
{
"type": "array",
"items": [
{
"enum": ["black"]
},
{
"type": "object",
"required": [ "this is a black property" ],
"additionalProperties": false,
"properties": {
"this is a black property": {
"type": "string"
}
}
}
]
}
]
}
},
"additionalProperties": false
}
是否有更好的方法来表达此规则?有关条件约束的四种策略的描述,请参见。这里是按照哪个策略生成最佳错误消息的顺序
依赖关系
:这是一个非常特定的约束,因此它往往会有大量错误消息。不幸的是,这在你的情况下不起作用如果
/那么
:这将在您的情况下产生最好的消息如果
/那么
那么好<代码>如果/,则在草案-07中添加了
。如果您不能使用draft-07或更高版本,这是您的最佳选择{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/root.json",
"type": "object",
"required": [
"color"
],
"properties": {
"color": {
"oneOf": [
{
"type": "array",
"items": [
{
"enum": [ "white"]
},
{
"type": "object",
"required": [ "a white property" ],
"additionalProperties": false,
"properties": {
"a white property": {
"type": "number"
}
}
}
]
},
{
"type": "array",
"items": [
{
"enum": ["black"]
},
{
"type": "object",
"required": [ "this is a black property" ],
"additionalProperties": false,
"properties": {
"this is a black property": {
"type": "string"
}
}
}
]
}
]
}
},
"additionalProperties": false
}