是否可以编写通用的JSON模式?

时间:2016-05-02 15:21:11

标签: json schema jsonschema abstraction generic-collections

在我的根JSON对象中,我有许多两种不同类型的JSON对象。我想知道是否有办法编写JSON模式来验证这些对象,而无需获取特定的,即通用模式。

例如,假设我有以下JSON:

"Profile":
{
    "Name":
    {
        "Type": "String",
        "Value": "Mike",
        "Default": "Sarah",
        "Description": "This is the name of my person."
    }
    "Age":
    {
        "Type": "Number",
        "Value": 27,
        "Default": 18,
        "Description": "This is the age of my person."
    }
}

此Profile JSON对象表示有关某人的各种详细信息的集合。注意我有两种不同类型的内部对象,字符串对象和数字对象。考虑到这一点,我现在想创建一个JSON模式来验证任何内部对象,而无需具体说明它们是哪些对象,例如:我不在乎我们有"姓名"或"年龄",我关心我们有适当的字符串对象和数字对象。

JSON Schema能否让我有能力这样做?如何基于我拥有的对象类型而不是特定的对象名来编写通用JSON模式?

这是我到目前为止所得到的:

{
"$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "StringObject": {
      "type": "object",
      "properties": {
        "Type": {
          "type": "string"
        },
        "Value": {
          "type": "string"
        },
        "Default": {
          "type": "string"
        },
        "Description": {
          "type": "string"
        }
      },
      "required": [
        "Type",
        "Value",
        "Default",
        "Description"
      ]
    }
  }
}

1 个答案:

答案 0 :(得分:2)

  

在我的根JSON对象中,我有许多两种不同类型的JSON对象。我想知道是否有办法编写JSON模式来验证这些对象,而无需获取特定的,即通用模式。

定义了联合类型来处理这个问题:

  

" union"的值type被编码为任何成员类型的值。

     

联合类型定义 - 包含两个或多个项目的数组,表示类型定义的并集。数组中的每个项目可以是简单类型定义或模式。

{
"type":
  ["string","number"]
}

<强>参考