2

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

例如我想为联系人添加一个类型

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

谢谢

4

4 回答 4

3

如果您的目标是定义contact一次并多次重复使用,您可以为object命名创建一个定义contact,然后在需要时使用 JSON 指针引用它。

其中一个示例可能如下所示:

{
    "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"
                }
            }
        }
    }
}

现在假设您希望在 Company 的 contact 属性上拥有比在 Person 上更多的属性。您可以使用 allOf 关键字,这样上面的 Company 现在看起来像这样:

"Company": {
    "properties": {
        "contact": {
            "allOf": [
                {"$ref" : "#/definitions/contact"},
                {
                    "properties": {
                        "fax": {
                            "type": "string"
                    }
                }
            ],
           "inBusinessSince" : {
               "type": "string",
               "format": "date-time"
            }
        }
    }

有关更多信息,请参阅以下链接。

于 2014-11-23T15:11:38.427 回答
2

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

假设您的程序需要这种格式的联系人类型的数据

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

这里的 Contact 对象有一个 id、name 和 address。我们可以为联系人创建一个模式

{
"type" : "object",
"properties": {
         "contact":{
              "type":"object"
              "items":{
                  "type": "object",
                  "properties":{
                          "contactid": {"type":"number"}
                          "contactname": {"type":"string"}
                          "address": {"type":"string"}
                               }
                      }
                   }
                }
} 
于 2012-11-19T13:04:50.267 回答
0

There's a json schema for that: http://json-schema.org/card

To include it in your json schema:

{
    "contact": { "$ref": "http://json-schema.org/card"}
}
于 2015-03-03T20:00:16.857 回答
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 模式规范。

于 2012-11-19T12:51:31.300 回答