1

私は json を初めて使用します。ISO8061 標準のタイムスタンプの配列を受け入れる json スキーマを作成し、時間が unix エポック、つまり1970 年 1 月 1 日 00:00:00 よりも後であることを確認したいと考えています。

json-schemaの日時は、時間がISO8061標準であることを確認していますが、時間がUNIXエポック、つまり1970年1月1日00:00:00よりも後でなければならないという制約を追加できませんでした

私のjsonシーマ:

{  "$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形式になるように制約することだけです。

JSON スキーマは、JSON 形式でサポートされているものに自分自身を制限しようとします。は JSON のネイティブ型ではないためdate-time、文字列として表す必要があります。これは文字列として表されるため、JSON スキーマは文字列制約のみを適用できます。

この規則には 1 つの例外があります。 integerは JSON スキーマの型ですが、JSON の型ではありません。

于 2015-12-05T00:01:22.023 に答える
1

JSON スキーマdate-time形式を AJV (別の JSON スキーマ バリデーター) と一緒に使用でき、そのformatMinimumバリデーターを使用して目的を達成できます。

たとえば、この Web サイト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 より前です。2 番目のテストは、今日 (2018 年 11 月 30 日) からの日付が 1970 年以降であるため有効です。

于 2018-11-30T14:47:46.727 に答える