【问题标题】:JSONSchema how to define a schema for a dynamic objectJSONSchema 如何为动态对象定义模式
【发布时间】:2017-04-13 09:01:10
【问题描述】:

我有一个 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,但我不确定如何执行此操作,或者是否可能。

注意我无法更改 JSON 的格式

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 2022-12-15
      • 2019-03-21
      • 2020-01-05
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多