用于检查YYYY-MM-DD日期的JSON模式

时间:2017-04-11 13:14:05

标签: java json jsonschema

有人可以告诉我JSON模式验证仅接受YYYY-MM-DD格式的日期吗?

我的示例JSON:

{"data1" : "foo", "date" :"2016-11-24"}

4 个答案:

答案 0 :(得分:3)

JSON Schema已经定义了日期,时间,日期时间,电子邮件,主机名,IP地址的格式。您可以更喜欢这种更简单和推荐的方法,而不是编写自己的正则表达式。

"date": {
  "type": "string",
  "format": "date"
}

日期和时间格式名称源自RFC 3339,第5.6节[RFC3339]。

参考:http://json-schema.org/latest/json-schema-validation.html#rfc.section.7.3

答案 1 :(得分:2)

将正则表达式添加到json架构 在架构中使用以下内容。

{
   "type": "string",
   "pattern": "^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$"
}

答案 2 :(得分:0)

使用以下解决方案...对于所有日期为YYYY-MM-DD或YYYY / MM / DD的格式,它都应适用。它验证了leap年并将日期限制在2月。

{
   "type": "string",
   "pattern": "(((19|20)([2468][048]|[13579][26]|0[48])|2000)[/-]02[/-]29|((19|20)[0-9]{2}[/-](0[469]|11)[/-](0[1-9]|[12][0-9]|30)|(19|20)[0-9]{2}[/-](0[13578]|1[02])[/-](0[1-9]|[12][0-9]|3[01])|(19|20)[0-9]{2}[/-]02[/-](0[1-9]|1[0-9]|2[0-8])))"
}

答案 3 :(得分:0)

使用 seconds since EPOCHJulian date 可能更容易:

{"type":"number"}

代替 regular expressionISO 8601 time stamp

{"type":"string","pattern":"^(?:[1-9][0-9]{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9][0-9](?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:Z|[+-][01][0-9]:[0-5][0-9])$"}

注意: 也许必须删除非捕获组。我用于测试的实现接受了它。这可能取决于实现。