【发布时间】:2020-10-07 01:04:12
【问题描述】:
我一直在努力解决 JSON Schema 中的“切换”问题。经历了关于这个主题的几个 GitHub 和 SO 讨论,但没有找到解决方案。 我的意图是根据“id”枚举改变“有效负载”对象属性,该枚举将具有 30 个不同的映射(每个枚举“id”的“有效负载”定义)。 例如,第一个消息 json 对象将具有数量和其他属性,但出于演示目的,我们只使用一个属性 (amout):
{
"message": {
"id": 1,
"correlationId": "a0011e83-280e-4085-b0f1-691059aaae61",
"payload": {
"amount": 100
}
}
}
第二个json:
{
"message": {
"id": 2,
"correlationId": "a0011e83-280e-4085-b0f1-691059aaae61",
"payload": {
"code": "xyz"
}
}
}
有没有办法以这种方式构建 JSON Schema(草案 7 或任何其他)?
【问题讨论】:
-
message架构中有一个大的oneOf有什么问题?每个oneOf将包括"id": { "const": 1 }和各自的payload模式的properties。在 SO 上也有几个例子。 -
@Carsten 所以基本上你是在提议这样的事情:
{ "message": { "type": "object", "required": ["subject"], "oneOf": [ {"properties": {"subject": {"const": 1}}}, {"properties": {"payload": {"$ref": "#/definitions/payload1"}}}, {"properties": {"subject": {"const": 2}}}, {"properties": {"payload": {"$ref": "#/definitions/payload2"}}}, ], "definitions": { "payload1": { "amount": "number" }, "payload2": { "name": "string" } } } } -
给定的架构还不完全正确(现在很难通过电话更正),但这是大致的方向。
-
这能回答你的问题吗? jsonSchema attribute conditionally required
标签: jsonschema