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

时间:2017-04-13 09:01:10

标签: json jsonschema

我有一个JSON响应,我正在尝试为

创建一个JSONSchema
{
    "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的格式

1 个答案:

答案 0 :(得分:5)

概念上你想要的是一个代表一个Typed Map的对象。

难点在于您没有命名属性可以将您的规范放在架构中,但在这种情况下您可以使用" additionalProperties"

{
"type": "object",
  "properties": {
    "gauges": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
           "value": {"type": "number"}
        }
      } 
    }
  }
}

"计" property被定义为一个对象,其中每个" additionalProperties"将具有包含类型编号的值的类型。

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

这个答案指向模拟解决方案 How to define JSON Schema for Map<String, Integer>?