我想使用 JSON Schema 并允许新类型(目前有字符串数字数组对象 boolean 和 null)
例如我想为联系人添加一个类型
甚至可以在 JSON 中使用吗?有什么建议么?
谢谢
我想使用 JSON Schema 并允许新类型(目前有字符串数字数组对象 boolean 和 null)
例如我想为联系人添加一个类型
甚至可以在 JSON 中使用吗?有什么建议么?
谢谢
如果您的目标是定义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"
}
}
}
有关更多信息,请参阅以下链接。
是的,我们可以在 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"}
}
}
}
}
}
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"}
}
“联系人”的类型应该是对象类型,不是吗?然后这个对象有几个属性,例如一个包含地址的字符串。所以根本不需要定义新类型,因为每个新类型——如果你把它分解的话——都由原始类型字符串、数字、数组或对象组成。
因此,对于联系人,您可以写:
"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 模式规范。