JSONSchema - 元素可以单独出现或出现在一个组中
JSONSchema - Element can appear alone or within a group
我有一个 JSON 看起来像这样:
{
"name": "Jane",
"company_name": "BrandNewStartup",
"designation": "DesignLead"
}
name
元素也可以单独出现在 JSON 中,所以下面的 JSON 也是有效的。
{
"name": "Jane"
}
但是如果缺少name
,company_name
和designation
就不会出现。所以下面的JSON应该是无效的:
{
"company_name": "BrandNewStartup",
"designation": "DesignLead"
}
我试过以下规则:
"oneOf": [
{
"required": [
"name",
"company_name",
"designation"
]
},
{
"required": [
"name"
]
}
]
但是这似乎不起作用(例如 this validation library 引发错误,即 JSON 应该只对一个模式有效,但对所有模式都有效).
如果我将其更改为 anyOf
,第一个包含所有 3 个字段的 JSON 有效,但是当 name
单独出现时,会引发错误 company_name
designation
字段丢失。
如何定义此规则?
JSON Schema 是一种基于约束的语言。允许您不指定的任何内容。
required
关键字表示对象中需要一个键,但不会固有地阻止包含任何其他键。
分解您问题中的架构,当您的对象中包含所有三个键时,如您的第一个示例实例,那么 oneOf
中的两个子架构都将有效。
为了限制允许的属性,您需要使用 additionalProperties
关键字,在您的情况下也意味着您需要使用 properties
关键字。 required
对 additionalProperties
没有影响。
第二个子模式只需要在实例只有 name
而没有其他键时才有效。这是使用以下修改后的 JSON 架构的现场演示:https://jsonschema.dev/s/7JcUa
{
"$schema": "http://json-schema.org/draft-07/schema",
"oneOf": [
{
"required": [
"name",
"company_name",
"designation"
]
},
{
"required": [
"name"
],
"properties": {
"name": true
},
"additionalProperties": false
}
]
}
我有一个 JSON 看起来像这样:
{
"name": "Jane",
"company_name": "BrandNewStartup",
"designation": "DesignLead"
}
name
元素也可以单独出现在 JSON 中,所以下面的 JSON 也是有效的。
{
"name": "Jane"
}
但是如果缺少name
,company_name
和designation
就不会出现。所以下面的JSON应该是无效的:
{
"company_name": "BrandNewStartup",
"designation": "DesignLead"
}
我试过以下规则:
"oneOf": [
{
"required": [
"name",
"company_name",
"designation"
]
},
{
"required": [
"name"
]
}
]
但是这似乎不起作用(例如 this validation library 引发错误,即 JSON 应该只对一个模式有效,但对所有模式都有效).
如果我将其更改为 anyOf
,第一个包含所有 3 个字段的 JSON 有效,但是当 name
单独出现时,会引发错误 company_name
designation
字段丢失。
如何定义此规则?
JSON Schema 是一种基于约束的语言。允许您不指定的任何内容。
required
关键字表示对象中需要一个键,但不会固有地阻止包含任何其他键。
分解您问题中的架构,当您的对象中包含所有三个键时,如您的第一个示例实例,那么 oneOf
中的两个子架构都将有效。
为了限制允许的属性,您需要使用 additionalProperties
关键字,在您的情况下也意味着您需要使用 properties
关键字。 required
对 additionalProperties
没有影响。
第二个子模式只需要在实例只有 name
而没有其他键时才有效。这是使用以下修改后的 JSON 架构的现场演示:https://jsonschema.dev/s/7JcUa
{
"$schema": "http://json-schema.org/draft-07/schema",
"oneOf": [
{
"required": [
"name",
"company_name",
"designation"
]
},
{
"required": [
"name"
],
"properties": {
"name": true
},
"additionalProperties": false
}
]
}