在JsonSchema中,format的值应该设为“full-date”还是“date”?

8
您可以使用 jsonSchemaLint 进行测试。
我有一个 JsonSchema,将格式设置为“full-date”。所有 Draft-6 验证器(Json.Net)都接受此模式作为有效。
{
  "title": "MyTestSchema",
  "type": "object",
  "properties": {
    "MyDateValue": {
      "type": "string",
      "format": "full-date",
      "description": "We expect yyyy-MM-dd"
    }
  }
}

但它无法识别这个 JSON 对象是否错误:

{
 "MyDateValue": "2017-10-1"
}

当我将模式从“full-date”切换到“date”时,它可以正常工作:
 {
  "title": "MyTestSchema",
  "type": "object",
  "properties": {
    "MyDateValue": {
      "type": "string",
      "format": "date",
      "description": "We expect yyyy-MM-dd"
    }
  }
}

"full-date" 是否是 Json 规则中的正确术语?请参考一些文档。

2个回答

18

该值应为date而不是full-date,请参阅此文档

以下是有效的值

  1. date-time :这应该是ISO 8601格式的日期,格式为YYYY-MM-DDThh:mm:ssZ(UTC时间)。这是推荐的日期/时间格式。

  2. date :这应该是YYYY-MM-DD格式的日期。建议您使用“date-time”格式而不是“date”格式,除非只需要传输日期部分。

  3. time :这应该是hh:mm:ss格式的时间。建议您使用“date-time”格式而不是“time”格式,除非只需要传输时间部分。

  4. utc-millisec :这应该是指定时间与1970年1月1日UTC午夜00:00之间以毫秒为单位的差异。该值应为数字(整数或浮点数)。

来源:此处


对于Node.js用户,可以添加此修复程序:https://github.com/ajv-validator/ajv/issues/1295#issuecomment-754679968 - 4givN
在Java中使用JsonSchemaFactory(17),这些标签在此处记录:https://json-schema.org/understanding-json-schema/reference/string.html - d.braun1991

0

关于github上的这个问题here,事实证明创建自己的模式代码是可以的,但需要知道验证器可能无法捕获它。

“从技术上讲,它总是正确的,因为格式是可扩展的。然而,不认识用户定义的格式的验证器将忽略它们。当然,如果其他人正在使用已配置为识别相同名称但以不同方式处理它的验证器,则您将遇到互操作性问题。但是,对于这个特定值full-date,它取决于您的JSON Schema版本。

在draft-04或draft-06中,full-date不是官方格式。尽管任何将其添加为自定义格式并且没有使其与RFC 3339中的含义相同的人都会遇到麻烦,因此即使在这些版本中,您也可以放心地使用它。

在即将发布的(下周?希望如此)draft-07中,full-date是保留的RFC 3339格式命名空间的一部分,如果实现,必须与RFC 3339的full-date定义兼容。 draft-07还将date定义为full-date的同义词,并建议使用它,因为据我所知,date在野外更常见。

无论如何,您在这里展示的用法可能非常安全,因为它与RFC 3339匹配,并且根据草案-07,该标准不强制支持,但是如果实现了,则必须按照RFC 3339所期望的方式进行操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接