假设我有几个对象,如车辆和计算机。
{"brand":"Ford", "dateOfManufacture":"23/082015"}
{"brand":"Apple", "dateOfManufacture":"23/082015"}
我知道我可以代表下面的车辆架构。然而,查看模式并不告诉我它的对象类型车辆或计算机。如何将该信息放入JSON中。 json-schema是否提供自定义类型支持。所以不要说“类型”:“对象”可以说“类型”:“车辆”。
{
"description": "schema validating people",
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"firstName": {"type": "string"},
"lastName": {"type": "string"}
}
}
}
TIA
答案 0 :(得分:3)
虽然您不能显式定义新的type
,但可以定义一个架构来描述该类型的对象的外观,然后在主架构中对其进行引用。
{
"$schema": "http://json-schema.org/draft-07/schema",
"definitions": {
"vehicle": {
"type": "object",
"properties": {
"brand": {
"type": "string",
"enum": ["ford","toyota"]
},
"dateOfManufacture": {
"type": "string"
}
}
}
},
"type": "object",
"properties": {
"primary": { "$ref": "#/definitions/vehicle" },
"secondary": { "$ref": "#/definitions/vehicle" }
}
}
此示例描述了一个对象,其中字段primary
和secondary
均为“类型” vehicle
-即数据必须与描述vehicle
内容的架构匹配看起来像。
在类型化的编程语言中,类型的概念用于传达数据的形状,但也传达有关数据身份的信息-即,它为结构的特定定义提供了身份或名称。
struct Foo { int a; string b; }
struct Bar { int a; string b; }
function quux(Foo foo) { ... }
在此虚拟示例中,即使看起来像Bar
,也无法将Quux
传递到Foo
中。这是因为类型除了描述数据(int a; string b;
)的形状外,还定义了数据结构的标识。
JsonSchema旨在描述数据的形状-即原始类型如何以某种结构进行组合,但没有提及身份。它关心字段的名称以及它们的结构,但不关心您所称的架构(或类似地,struct
的名称)。
答案 1 :(得分:0)
您也可以在以下架构中添加产品类型: -
{"brand":"Ford", "dateOfManufacture":"23/082015", "productType":"vehicle"}
{"brand":"Apple", "dateOfManufacture":"23/082015", "productType":"computer"}
在确定架构时,您可以确保它具有产品分类的所有必要信息。