JSONスキーマを使用していくつかの値を検証したいと思います。私は2つのオブジェクト、それらを呼び出すtrackedItemsとtrackedItemGroups。 trackedItemGroupsは、グループ名とtrackedItems名のリストです。私はTrackedItemGroups
さんTrackedItems
アレイ内のすべての文字列がTrackedItems.TrackedItemName
で定義されている名前であることを検証したいと思います他のJSONオブジェクトの名前にJSON値を制限する
"TrackedItems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"TrackedItemName": { "type": "string" },
"Properties": { ---- }
}
}
},
"TrackedItemGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"GroupName": {
"type": "string"
},
"TrackedItems": {
"type": "array",
"items": {"type": "string"}
}
}
}
}
:たとえば、スキーマは似ています。
これはenum
プロパティを使用して値を制限するようなものですが、enum
リストはTrackedITems.TrackedItemName
の値に基づいて生成されます。
JSON独自のデータを検証に使用するには、どのようにスキーマを記述できますか?
TrackedItemsは、自分が属するグループを定義していますが、何百ものアイテムが追跡されています。この組織は、私のユースケースの方がはるかに優れています。
私はこの試みた:
"TrackedItems": {
"type": "array",
"items": {
"oneOf": [
{"$ref":"#/properties/TrackedItems/items/properties/TrackedItemName"}
]
}
}
をしかし、これはエラーになります。データの例
Newtonsoft.Json.Schema.JSchemaReaderException: Could not resolve schema reference '#/properties/TrackedItems/items/properties/TrackedItemName'.
、私はTrackedItemsを持っていた場合:
アイテム1、アイテム2、 ItemA、ItemB、ItemC
グループ:
グループ1: アイテム1、ItemB、ItemC
グループ2: アイテム1、アイテム2、ItemZ
それはTrackedItemsで定義されていない項目が含まれているため、グループ2は、違反をスローしていました。
もっと多くの研究をしていただき、ありがとうございました。私はスキーマがこれで動作しないことに気付きました。代わりにコードでこの検証を実行する単体テストを作成しました。ご回答有難うございます。 – MichaelHouse