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 包含一个值的类。 (不知道其他类型的语言,但我愿意接受建议)

这个答案指向一个模拟解决方案