JSONSchema如何定义动态对象的架构 [英] JSONSchema how to define a schema for a dynamic object

查看:7
本文介绍了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的格式

推荐答案

从概念上讲,您需要的是表示类型化映射的对象。

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

{
"type": "object",
  "properties": {
    "gauges": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
           "value": {"type": "number"}
        }
      } 
    }
  }
}
"Gauge"属性被定义为一个对象,在该对象中,每个"addtionalProperties"都将具有一个包含类型Number的值的类型。

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

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

这篇关于JSONSchema如何定义动态对象的架构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆