0

既知のオブジェクト (「敵」と「友人」) を強制的に定義し、他のオブジェクトを許可することはできますか?

最後のオブジェクト {"type": "object"} を追加して、意図した動作を表示しました。このスキーマで有効です。最後のオブジェクトを削除すると、2 つのオブジェクトは許可されますが、それ以外は許可されません。

JSON スキーマ (より高速なテストのために配列を使用):

{
  "type": "array",
  "items": {
    "anyOf": [
      {"$ref": "#/definitions/friend"},
      {"$ref": "#/definitions/enemy"},
      {"$ref": "#/definitions/future"}
    ]
  },
  "definitions": {

    "friend": {
      "type": "object",
      "properties": {
        "time": {"type": "string"},
        "value": {"type": "number", "minimum": 100}
      },
      "required": ["time", "value"],
      "additionalProperties": false
    },

    "enemy": {
      "type": "object",
      "properties": {
        "enemy": {"type": "string"},
        "color": {"type": "number"}
      },
      "required": ["enemy", "color"],
      "additionalProperties": false
    },

    "future": {
      "type": "object",
      "properties": {
        "time": {"type": "string"}
      }, "required": ["time"],
      "additionalProperties": true
    }

  }
}

JSON の例 (上位 3 つは問題ありませんが、最後の 3 つは問題ありません):

[
  {"time": "123", "value": 100}, <- should be valid
  {"time": "1212", "value": 150}, <- should be valid
  {"enemy": "bla", "color": 123}, <- should be valid
  {"time": "1212", "value": 50}, <- should be invalid bcoz of "future"
  {"enemy": "bla", "color": "123"}, <- shouldn't be valid bcoz of "enemy" schema
  {"somethingInFuture": 123, "someFutProp": "ok"} <- should be valid
]
4

1 に答える 1

0

本当に欲しいものは明確ではありませんが、おそらくここでdependenciesとの組み合わせを使用したいと思うでしょうminProperties。ここでは、このキーワードの 2 つの形式、プロパティの依存関係とスキーマの依存関係が使用されています。また、少なくとも 1 つのプロパティを定義する必要があるため、minProperties. したがって、次のようなことができます( の共通スキーマも因数分解したことに注意してくださいcolor。それは、あなたが望むものかもしれませんし、そうでないかもしれません):

{
    "type": "object",
    "minProperties": 1,
    "additionalProperties": {
        "type": "string" // All properties not explicitly defined are strings
    },
    "properties": {
        "color": { "type": "number" }
    },
    "dependencies": {
        "enemy": "color", // property dependency
        "friend": { // schema dependency
            "properties": { "color": { "minimum": 50 } },
            "required": [ "color" ]
        }
    }
}

このスキーマでは、「敵」と「友人」を同時に許可することに注意してください (元のスキーマもそうです)。より適切に行うには、有効および無効と見なすサンプル JSON を提供する必要があります。

于 2015-06-03T06:15:59.977 に答える