41

スキーマ ドラフト 03 でこれが可能かどうか疑問に思っています。依存関係が他の場所で機能するようになりましたrequired。フィールドのプロパティを指定するためにそれらを使用するには、それらを創造的に使用する必要があると思います。

私の現在の最善の試み(これはうまくいきません)は、私が何を求めているかについてのアイデアを与えるはずです. デフォルトで必須の値が必要で、別のフィールドに特定の値がある場合はオプションです。

{
    "description"   : "An address...",
    "type" : "object",
    "properties" : {
        "postcode": {
            "type" : "string",
            // postcode should be required by default
            "required" : true,      
            // postcode shouldn't be required if the country is new zealand 
            "dependencies" : {
                "country" : {
                    "enum" : ["NZ", "NZL", "NEW ZEALAND"]
                },
                "postcode" : {
                    "required" : false      
                }
            }
        },
        "country": {
            "type" : "string",
            "enum" : [
                // various country codes and names...
            ],
            "default" : "AUS"
        }
    }
}
4

4 に答える 4

27

これは、ドラフトのバージョン 3 で確実に可能です。許可されている国の完全なリストがあるので、次のようにすることができます。

{
    "type": [
        {
            "title": "New Zealand (no postcode)",
            "type": "object",
            "properties": {
                "country": {"enum": ["NZ", "NZL", "NEW ZEALAND"]}
            }
        },
        {
            "title": "Other countries (require postcode)",
            "type": "object",
            "properties": {
                "country": {"enum": [<all the other countries>]},
                "postcode": {"required": true}
            }
        }
    ],
    "properties": {
        "country": {
            "type" : "string",
            "default" : "AUS"
        },
        "postcode": {
            "type" : "string"
        }
    }
}

したがって、実際にはスキーマに 2 つのサブタイプを定義します。1 つは郵便番号が必要な国用で、もう 1 つは必要でない国用です。

EDIT - v4の同等物は非常に似ています。最上位の"type"配列の名前を に変更するだけ"oneOf"です。

于 2012-07-25T14:50:35.017 に答える
15

誰かがドラフト 4 の解決策を探している場合は、dependenciesキーワードと一緒にキーワードを使用できますenum

{
    "type": "object",
    "properties": {
        "play": {
            "type": "boolean"
        },
        "play-options": {
            "type": "string"
        }
    },
    "dependencies": {
        "play-options": {
            "properties": {
                "play": {
                     "enum": [true]
                }
            }
        }
    }
}

このように、値play-optionsは常に である必要があります。playtrue

于 2016-10-27T19:44:40.840 に答える
5

最新のスキーマでは、oneOf条件を使用してこれを行うことができます。

{
    "description"   : "An address...",
    "type" : "object",
    "properties" : {
        "postcode": {
            "type" : "string"
        },
        "country": {
            "type" : "string",
            "enum" : [
                // various country codes and names...
            ],
            "default" : "AUS"
        }
    },
    "oneOf": [
        {
          "properties": {
            "country": { "enum" : ["NZ", "NZL", "NEW ZEALAND"] }
          }
        },
        { "required": ["postcode"] } 
      ]
}

このoneOf条件では、配列内の条件の 1 つが真である必要があります。

于 2020-05-19T20:39:27.520 に答える
2

仕様の03バージョンを調べたところ、あなたが説明していることは不可能だと思います。これは間違いなく「単純な依存関係」ではなく、「スキーマの依存関係」の説明には、プロパティのを考慮する方法が記載されていません。

必要なのは「条件付きスキーマ依存関係」のようです。

SimpleとSchemaの依存関係で何が可能かについての議論がここにあります:http: //groups.google.com/group/json-schema/msg/8145690ebb93963b

条件付き依存関係をサポートする計画があるかどうか、そのグループに尋ねることができます。

于 2012-02-01T20:14:06.133 に答える