JSONSchema 如何为动态对象定义模式
JSONSchema how to define a schema for a dynamic object
我有一个 JSON 响应,我正在尝试为
创建一个 JSON 架构
{
"gauges": {
"foo": {
"value": 1234
},
"bar": {
"value": 12.44
}
}
}
重要的是要知道关联数组 gauges
中的对象是动态生成的,因此可以有零到多。 gauges
中的每个对象总是有一个 value
属性 并且它总是一个数字。
所以这些都是有效的
示例 1
{
"gauges": {
"foo": {
"value": 1234
}
}
}
示例 2
{
"gauges": {
"dave": {
"value": 0.44
},
"tommy": {
"value": 12
},
"steve": {
"value": 99999
}
}
}
示例 3
{
"gauges": {}
}
我已经查看了规范,如果这是一个数组,我知道我可以使用 anyOf
但我不确定如何执行此操作,或者是否有可能。
NB 我无法更改 JSON
的格式
从概念上讲,您想要的是表示类型化映射的对象。
困难在于您没有命名 属性 来将您的规范放入架构中,但在那种情况下您可以使用 "additionalProperties"
{
"type": "object",
"properties": {
"gauges": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"value": {"type": "number"}
}
}
}
}
}
"gauges" 属性 被定义为一个对象,其中每个 "additionalProperties" 都有一个包含类型 number 值的类型。
注意: 在 java 中,您可以将其序列化为 Map<String,Value>
,Value 包含一个值的类。 (不知道其他类型的语言,但我愿意接受建议)
这个答案指向一个模拟解决方案
我有一个 JSON 响应,我正在尝试为
创建一个 JSON 架构{
"gauges": {
"foo": {
"value": 1234
},
"bar": {
"value": 12.44
}
}
}
重要的是要知道关联数组 gauges
中的对象是动态生成的,因此可以有零到多。 gauges
中的每个对象总是有一个 value
属性 并且它总是一个数字。
所以这些都是有效的
示例 1
{
"gauges": {
"foo": {
"value": 1234
}
}
}
示例 2
{
"gauges": {
"dave": {
"value": 0.44
},
"tommy": {
"value": 12
},
"steve": {
"value": 99999
}
}
}
示例 3
{
"gauges": {}
}
我已经查看了规范,如果这是一个数组,我知道我可以使用 anyOf
但我不确定如何执行此操作,或者是否有可能。
NB 我无法更改 JSON
的格式从概念上讲,您想要的是表示类型化映射的对象。
困难在于您没有命名 属性 来将您的规范放入架构中,但在那种情况下您可以使用 "additionalProperties"
{
"type": "object",
"properties": {
"gauges": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"value": {"type": "number"}
}
}
}
}
}
"gauges" 属性 被定义为一个对象,其中每个 "additionalProperties" 都有一个包含类型 number 值的类型。
注意: 在 java 中,您可以将其序列化为 Map<String,Value>
,Value 包含一个值的类。 (不知道其他类型的语言,但我愿意接受建议)
这个答案指向一个模拟解决方案