必要なおよび/または条件付きで必要なプロパティのjsonschema検証

混乱している

常に2つのプロパティを持つjsonオブジェクトを検証する必要があります。

  • タイプ
  • 名前

タイプは「A」、「B」または「C」であり、

タイプが「A」の場合、プロパティ「foo」も必要であり、追加のプロパティは許可されません。

OK:

{
    "type": "A",
    "name": "a",
    "foo": "a",
}

よくない:

{
    "type": "A",
    "name": "a",
    "foo": "a",
    "lol": "a"
}

タイプが「B」の場合、プロパティ「bar」が必要であり、追加のプロパティは許可されません。

タイプが「C」の場合、プロパティ「bar」が必須であり、オプションで「zen」プロパティも存在できます。

OK:

{
    "type": "C",
    "name": "a",
    "bar": "a",
    "zen": "a"
}

{
    "type": "C",
    "name": "a",
    "bar": "a",
}

よくない:

{
    "type": "C",
    "name": "a",
    "bar": "a",
    "lol": "a" 
}

残念ながら、この質問に対する優れた回答は私のケースを部分的にカバーしていますが、私は自分に合ったjsonschemaを構築することができませんでした。

編集:

これが私が試したものです。

{
    "$schema": "http://json-schema.org/draft-04/schema",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "enum": ["A", "B", "C"]
        },
        "name": {"type": "string"},
        "foo": {"type": "string"},
        "bar": {"type": "string"},
        "zen": {"type": "string"},
    },
    "anyOf": [
        {
            "properties": {"type": {"enum": ["A"]}},
            "required": ["foo"],
        },
        {
            "properties": {"type": {"enum": ["B"]}},
            "required": ["bar"],
        },
        {
            "properties": {"type": {"enum": ["C"]}},
            "required": ["bar"],
        },
    ]
}

私の問題は、「anyOf」のオブジェクト内でフィールド「additionalProperties」をfalseに設定しても、期待した結果が得られないことです。

たとえば、次のjsonは、追加のプロパティ「lol」があるにもかかわらず、検証に合格します。

{
    "type": "A",
    "name": "a",
    "foo": "a",
    "lol": "a"
}
ヘンリーアンドリュース

JSONスキーマは、各サブスキーマの制約が個別に評価される制約システムです。つまり、「additionalProperties」は、同じ即時スキーマオブジェクト内の「properties」または「patternProperties」のみを「表示」できます。

さらに、「プロパティ」と「patternProperties」のみに基づいて、「必須」に基づいてプロパティを「表示」することはできません。

私の知る限り、anyOfのブランチ内で「additionalProperties」:falseを設定している場合、許可されるプロパティは「type」のみであるため、これは機能しないはずです。それを実行し、「type」以外のプロパティを許可している場合は、使用している実装を知りたいと思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Passwordless / VerifyでAuth0.jsが「有効なスキーマが満たされていません」および「必要なプロパティがありません」というペイロード検証エラーを表示するのはなぜですか?

分類Dev

最大および最小の幅/高さのcssプロパティの設定を解除するには、異なる値が必要なのはなぜですか?

分類Dev

条件付きで必要なjsonSchema属性は、親オブジェクトによって異なります

分類Dev

JSONSchema-必要なプロパティが機能しない

分類Dev

ant条件付き実行(antのif-elseステートメント)およびプロパティが空の文字列でないことの確認

分類Dev

Karma、Angular 7、およびFontAwesomeの問題「fa-icon」の既知のプロパティではないため、「icon」にバインドできません

分類Dev

Angular 2+およびObservables:「select」の既知のプロパティではないため「ngModel」にバインドできません

分類Dev

複数のプロパティの検証には1つ必要です

分類Dev

NestJS-1つのプロパティに基づいて、条件付きで本体を検証します

分類Dev

[JsonIgnore]をデフォルトにして、必要なプロパティにのみ注釈を付けることはできますか?

分類Dev

エラー:環境またはシステムプロパティLDAPおよびJNDIでクラス名を指定する必要があります

分類Dev

javascriptによって要素が作成されているため、eventListenerを使用して必要な数の要素のcssプロパティを変更できません

分類Dev

検索されたプロパティの条件付きルールで.filter()関数を使用できますか?

分類Dev

データまたはクラスを制御できないクラスのプロパティを検証しますか?

分類Dev

検証付きのTextBox。入力したテキストが無効な場合でも、ターゲットプロパティを更新するにはどうすればよいですか?

分類Dev

軸(サブプロット)および/またはmatplotlib.pyplot(plt)の条件付きステートメント

分類Dev

少なくとも1回はモックでの呼び出しが必要ですが、簡単なテストをモックして検証しようとしたときに実行されませんでした

分類Dev

C#構造体のプロパティは、COMおよびVB6で使用できない名前を取得しますか?

分類Dev

エンティティタイプ「X」のシードエンティティは、必要なプロパティ「..ID」に値が指定されていないため、追加できません。

分類Dev

Grails入力エラー:プロパティは有効な日付である必要があります

分類Dev

golangでozzo検証を使用して条件付きで必要な検証を実行するにはどうすればよいですか?

分類Dev

条件付きオブジェクトマッパーでのAutomapperプロパティの検証

分類Dev

Vulkan、検証レイヤー(および拡張機能として仕様)がパイプラインが特定の添付ファイルに書き込まないことを禁止しているのはなぜですか?

分類Dev

ポリマーの計算されたプロパティに明示的なプロパティ引数が必要なのはなぜですか?

分類Dev

mysql testcontainersを実行するためにjdbc接続プロパティが必要なのはなぜですか?

分類Dev

nodeJs-必要なプロパティにアクセスできません

分類Dev

安全なナビゲーション演算子(?。)または(!。)およびnullプロパティパス

分類Dev

スイフト:怠惰な、計算されたプロパティ、およびプロパティオブザーバーを許可できない理由

分類Dev

JSFページ-検証がまだ必要なプロセス属性がないのはなぜですか?

Related 関連記事

  1. 1

    Passwordless / VerifyでAuth0.jsが「有効なスキーマが満たされていません」および「必要なプロパティがありません」というペイロード検証エラーを表示するのはなぜですか?

  2. 2

    最大および最小の幅/高さのcssプロパティの設定を解除するには、異なる値が必要なのはなぜですか?

  3. 3

    条件付きで必要なjsonSchema属性は、親オブジェクトによって異なります

  4. 4

    JSONSchema-必要なプロパティが機能しない

  5. 5

    ant条件付き実行(antのif-elseステートメント)およびプロパティが空の文字列でないことの確認

  6. 6

    Karma、Angular 7、およびFontAwesomeの問題「fa-icon」の既知のプロパティではないため、「icon」にバインドできません

  7. 7

    Angular 2+およびObservables:「select」の既知のプロパティではないため「ngModel」にバインドできません

  8. 8

    複数のプロパティの検証には1つ必要です

  9. 9

    NestJS-1つのプロパティに基づいて、条件付きで本体を検証します

  10. 10

    [JsonIgnore]をデフォルトにして、必要なプロパティにのみ注釈を付けることはできますか?

  11. 11

    エラー:環境またはシステムプロパティLDAPおよびJNDIでクラス名を指定する必要があります

  12. 12

    javascriptによって要素が作成されているため、eventListenerを使用して必要な数の要素のcssプロパティを変更できません

  13. 13

    検索されたプロパティの条件付きルールで.filter()関数を使用できますか?

  14. 14

    データまたはクラスを制御できないクラスのプロパティを検証しますか?

  15. 15

    検証付きのTextBox。入力したテキストが無効な場合でも、ターゲットプロパティを更新するにはどうすればよいですか?

  16. 16

    軸(サブプロット)および/またはmatplotlib.pyplot(plt)の条件付きステートメント

  17. 17

    少なくとも1回はモックでの呼び出しが必要ですが、簡単なテストをモックして検証しようとしたときに実行されませんでした

  18. 18

    C#構造体のプロパティは、COMおよびVB6で使用できない名前を取得しますか?

  19. 19

    エンティティタイプ「X」のシードエンティティは、必要なプロパティ「..ID」に値が指定されていないため、追加できません。

  20. 20

    Grails入力エラー:プロパティは有効な日付である必要があります

  21. 21

    golangでozzo検証を使用して条件付きで必要な検証を実行するにはどうすればよいですか?

  22. 22

    条件付きオブジェクトマッパーでのAutomapperプロパティの検証

  23. 23

    Vulkan、検証レイヤー(および拡張機能として仕様)がパイプラインが特定の添付ファイルに書き込まないことを禁止しているのはなぜですか?

  24. 24

    ポリマーの計算されたプロパティに明示的なプロパティ引数が必要なのはなぜですか?

  25. 25

    mysql testcontainersを実行するためにjdbc接続プロパティが必要なのはなぜですか?

  26. 26

    nodeJs-必要なプロパティにアクセスできません

  27. 27

    安全なナビゲーション演算子(?。)または(!。)およびnullプロパティパス

  28. 28

    スイフト:怠惰な、計算されたプロパティ、およびプロパティオブザーバーを許可できない理由

  29. 29

    JSFページ-検証がまだ必要なプロセス属性がないのはなぜですか?

ホットタグ

アーカイブ