JSONSchema如何为动态对象定义模式

bay*_*ezy 5 json jsonschema

我有一个JSON响应,我正在尝试为其创建一个JSONSchema

{
    "gauges": {
        "foo": {
            "value": 1234
        },
        "bar": {
            "value": 12.44
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

重要的是要知道关联数组gauges中的对象是动态生成的,因此可以有零到多个.每个对象都gauges将具有一个value属性,它始终是一个数字.

所以这些都是有效的

例1

{
    "gauges": {
        "foo": {
            "value": 1234
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例2

{
    "gauges": {
        "dave": {
            "value": 0.44
        },
        "tommy": {
            "value": 12
        },
        "steve": {
            "value": 99999
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例3

{
    "gauges": {}
}
Run Code Online (Sandbox Code Playgroud)

我看过规范,如果这是一个我知道我可以使用的数组,anyOf但我不确定如何做到这一点,或者甚至可能.

注意我无法更改JSON的格式

pde*_*dem 6

从概念上讲,您想要的是一个代表类型化地图的对象。

困难之处在于您没有命名属性可将规范放入架构中,但在这种情况下,您可以使用“ additionalProperties”

{
"type": "object",
  "properties": {
    "gauges": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
           "value": {"type": "number"}
        }
      } 
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

“ gauges”属性定义为一个对象,其中的每个“ additionalProperties”都将具有一个包含数字类型值的类型。

注意:在Java中,您可以使用Map<String,Value>包含值的类将其序列化为Value。(不知道其他类型的语言,但我愿意接受建议)

这个答案指向一个模拟解决方案。 如何为Map <String,Integer>定义JSON模式?