1

我是 json 新手,我想编写一个 json 模式,它接受 ISO8061 标准中的时间戳数组,并确保时间在 unix 纪元之后,即1970 年 1 月 1 日 00:00:00

json-schema 中的日期时间确保时间是 ISO8061 标准,但我无法添加时间应该在 unix 纪元之后的约束,即1970 年 1 月 1 日 00:00:00

我的 json shema:

{  "$schema": "http://json-schema.org/draft-04/schema#",
   "type" : "array", // array of time stamps 
   "items" : { 

        "type": "string",
        "format": "date-time"
    }  
}

json数据

["1954-12-11T00:00:00Z"]

您能否让我们知道我们是否可以限制在模式级别提交的时间,即提供的日期时间应该在 unix 纪元之后,即1970 年 1 月 1 日 00:00:00

4

2 回答 2

1

您可以使用 JSON 模式date-time格式,连同 AJV(另一个 JSON 模式验证器)及其formatMinimum验证器,您可以实现您想要的。

您可以在此网站https://npm.runkit.com/ajv上运行的最小工作示例如下:

var Ajv = require('ajv');
var ajv = new Ajv({allErrors: true, $data: true});
require('ajv-keywords')(ajv);

var schema = {
  "properties": {
      "Date": {
          "type": "string",
          "format": "date-time",
          "formatMinimum": "1970-01-01T00:00:00.000"
      }
  }
};

var validate = ajv.compile(schema);

test({"Date": "1954-12-11T00:00:00Z"});
test({"Date": "2018-11-30T00:00:00Z"});

function test(data) {
  var valid = validate(data);
  if (valid) console.log('Valid!');
  else console.log('Invalid: ' + ajv.errorsText(validate.errors));
}

第一次测试失败,因为测试日期是 1954 年,所以在硬编码的最小日期 1970-01-01 之前。第二个测试是有效的,因为从今天(2018-11-30)开始的日期是 1970 年之后。

于 2018-11-30T14:47:46.727 回答
1

JSON Schema 中没有任何内容允许比较日期。它所能做的就是将字符串限制为date-time格式。

JSON Schema 尝试将自身限制为 JSON 格式所支持的内容。因为date-time不是 JSON 中的原生类型,所以它必须表示为字符串。因为它表示为字符串,所以 JSON Schema 只能对其应用字符串约束。

这条规则有一个例外。 integer是 JSON Schema 中的类型,但不是 JSON 中的类型。

于 2015-12-05T00:01:22.023 回答