我对json说道。在定义我的RESTful API结果的格式(即JSON)时,我觉得将它记录为我自己的JSON schema会更容易。在写一篇文章的时候我几乎没有问题:
$schema
属性?$schema
的值。[忽略这一行,这是为了让格式化工作跟随json ..]
{
"date":{
"type":"object",
"properties":{
"month":{
"type":"integer",
"minimum":1,
"maximum":12
},
"year":{
"type":"integer",
"minimum":0
}
}
},
"personInfo":{
"type":"object",
"properties":{
"name":{
"type":"string"
},
"dateOfBirth":{
"type":"date"
}
}
},
"student":{
"type":"object",
"properties":{
"id":{
"type":"personInfo"
},
"pass_out_year":{
"type":"date"
}
}
}
}
而不是在多个地方提供“日期”属性,如下所示:
{
"personInfo":{
"type":"object",
"properties":{
"name":{
"type":"string"
},
"dateOfBirth":{
"type":"object",
"properties":{
"month":{
"type":"integer",
"minimum":1,
"maximum":12
},
"year":{
"type":"integer",
"minimum":0
}
}
}
}
},
"student":{
"type":"object",
"properties":{
"id":{
"type":"personInfo"
},
"pass_out_year":{
"type":"object",
"properties":{
"month":{
"type":"integer",
"minimum":1,
"maximum":12
},
"year":{
"type":"integer",
"minimum":0
}
}
}
}
}
}
根据5.1类型in the spec,这是不可能的,但它似乎是一个基本的用例!
答案 0 :(得分:4)
$schema
可用于指定其符合的架构。$ref
链接到随后引入的其他架构。$ref
和JSON Pointer从其他模式导入定义。您可以随时通过validating架构测试,看看您是否犯过任何错误。
答案 1 :(得分:3)
在撰写本文时,JSON Schema规范的当前版本为 draft-v4 ,其中date-time
个实例的格式string
为{{3并且在实践中非常有用。
目前尚未定义更简单的date
格式,但您可以轻松地将对象的属性定义为string
类型,然后应用format
clearly specified (ECMA 262正则表达方言)就在它之上。
例如:
{
"$schema": "http://json-schema.org/draft-04/schema",
"title": "Example Schema"
"description": "This schema contains only a birth date property"
"type": "object",
"required": ["birth_date"],
"properties": {
"birth_date": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"
}
}
}
答案 2 :(得分:2)
为什么不按照#5.23 in JSON Schema Draft 03使用"format" : "date"
?
另外,您对出生日期的定义不包含似乎是错误的日期。
答案 3 :(得分:1)
规范似乎暗示你可以:
其他类型值可用于自定义目的,......
然后继续讨论最小实现的验证器可能做什么。
在我看来,你想做的事似乎没问题。 将类型引用和类型定义保存在同一文件中可能有助于您的架构清晰。
我认为您的文件包含Q应该在json之外处理,例如有一个dev步骤,从脚本/模板(例如erb或其他类似的)合并你的子文件生成完整的json。在我看来,您的服务应始终提供与该服务完全交互所需的完整json。如果从客户的角度来看这无法管理,则可能是重构和引入其他服务的信号。