我正在尝试为以下JSON创建JSON模式,
{
"messages":{
"bookCreated":{
"default":{
"channels":{
"sqs":{
"enabled":true,
"topic":"sample-topic",
"shares":true
}
}
}
},
"bookCreationInProgress":{
"default":{
"channels":{
"sns":{
"enabled":true,
"topic":"sample-sns",
"shares":true
}
}
}
},
"bookCreationCompleted":{
"default":{
"channels":{
"s3":{
"enabled":true,
"topic":"sample-s3-bucket",
"shares":true
}
}
}
}
}
}
类似地,在消息bookCreated
、bookCreationInProgress
、bookCreationCompleted
中,我们有几个动态属性。在每个对象中,默认和通道详细信息都是必需的。每个通道都有一组强制属性。
我浏览了互联网,为上面的JSON创建了JSON模式,但我没有得到任何关于如何为嵌套映射对象创建JSON模式的参考。
由于我无法为第一个动态对象构建json模式,我无法进一步构建该模式。
{
"$schema": "app_messages",
"type": "object",
"additionalProperties": true,
"anyOf": [
{
"required": ["messages"]
}
],
"properties": {
"id": {
"type": "string"
}
}
}
如果有人能帮助我分享如何在JSON模式中处理动态属性映射的指针,那将是非常棒的。任何帮助都是非常可观的。
一个好的解决方案使用"additionalProperties";作为json对象(而不是布尔对象(组合为"$ref";以及"$defs";。一个可以讨论的例子可能是:
{
"$schema": "app_messages",
"type": "object",
"additionalProperties": {
"anyOf": [
{ "$ref": "#/$defs/subobj1" },
{ "$ref": "#/$defs/subobj2" }
]
},
"properties": {
"id": { "type": "string" }
},
"$defs": {
"subobj1": {
"type": "object",
"properties": {
"message": { "type": "string" }
...
},
"required": [ "message" ]
},
"subobj2": {
"type": "object",
"properties": {
"message": { "type": "string" }
...
},
"required": [ "message" ]
}
}
}
以这种方式,主对象可以具有";id";属性和所有附加属性必须匹配子定义"中的一个;subobj1";或";subobj2";。