JSON模式类型

时间:2012-11-19 12:16:39

标签: jsonschema

我想使用JSON Schema并允许新类型(目前有字符串数组数组对象boolean和null)

例如我想添加联系人类型

甚至可以在JSON中使用吗?有什么建议吗?

感谢

4 个答案:

答案 0 :(得分:2)

是的,我们可以在JSON中添加联系人类型

让我们说你的程序需要这种格式的联系类型数据

{
contact: [
{contactid:1, contactname: "abc", address:"abcdfg"},
{contactid:2, contactname: "hjk", address:"hjkdfg"}
]
}

此处Contact对象具有id,名称和地址。 我们可以为联系人创建一个模式

{
"type" : "object",
"properties": {
         "contact":{
              "type":"object"
              "items":{
                  "type": "object",
                  "properties":{
                          "contactid": {"type":"number"}
                          "contactname": {"type":"string"}
                          "address": {"type":"string"}
                               }
                      }
                   }
                }
} 

答案 1 :(得分:2)

如果您的目标是定义contact一次并重复使用多次,则可以为名为object的{​​{1}}创建定义,然后使用JSON指针引用它你需要它的时间。

其中一个例子可能如下:

contact

现在假设您想要在公司的联系人属性上拥有比在Person上更多的属性。您可以使用allOf关键字,以便上面的公司现在看起来像这样:

{
    "type": "object",
    "definitions": {
        "contact": {
            "properties": {
                "name": {
                "type": "string"
                 },
                 "phone": {
                    "type": "string"
                }
            }
        }
    },
    "properties": {
        "Person": {
            "properties": {
                "contact": {
                    "$ref" : "#/definitions/contact"
                },
                "birthday": {
                    "type": "string",
                    "format": "date-time"
                }
            }
        },
        "Company": {
            "properties": {
                "contact": {
                    "$ref" : "#/definitions/contact"
                },
                "inBusinessSince" : {
                    "type": "string",
                    "format": "date-time"
                }
            }
        }
    }
}

有关详细信息,请参阅以下链接。

答案 2 :(得分:0)

“联系人”的类型是对象类型,不是吗?然后,该对象具有多个属性,例如包含地址的字符串。所以根本不需要定义新类型,因为每个新类型 - 如果你将其分解 - 包括基本类型字符串,数字,数组或对象。

所以对于联系人你可以写:

"contact"{
    "id": "contact",
    "required": false,
    "type": "object",
    "properties":{
        "address"{
            "id": "address",
            "required": true,
            "type": "string"
        }
        "phoneNumbers"{
            "id": "phoneNumbers",
            "required": false,
            "type": "array",
            "items":{
                "id": "0",
                "required": false,
                "type": "object",
                "properties":{
                    "type"{
                        "id": "type",
                        "required": false,
                        "type": "string"
                    }
                    "number"{
                        "id": "number",
                        "required": false,
                        "type": "string"
                    }
                }
            }
        }
    }
}

根据此模式,简单的联系对象可能如下所示:

{
    "address": "Example Street 123",
    "phoneNumbers":
    [
        {
            "type": "home",
            "number": "123-456789"
        }
    ]
} 

现在说你在另一个对象中有几个联系人,那么你必须在你存储联系人的每个地方添加联系方式。
如上所述,我认为没有必要引入新类型,尽管你的架构可能变得非常大。除此之外,我不知道任何允许新原始类型的JSON模式规范。

答案 3 :(得分:0)

有一个json架构:http://json-schema.org/card

将其包含在json架构中:

{
    "contact": { "$ref": "http://json-schema.org/card"}
}