일부 값의 유효성을 검사하기 위해 JSON 스키마를 사용하고 싶습니다. 나는 두 객체를 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, 항목 A, 항목 B, 항목 C
및 그룹 :
그룹 1 : 항목 1, ItemB, ItemC
그룹 2 : 항목 1, 항목 2, ItemZ
이 항목이 TrackedItems에 정의되지 않은이 포함되어 있기 때문에 그룹 2는 위반을 던질 것입니다.
감사합니다. 더 많은 조사를 한 후에 스키마가이 작업을 수행하지 않는다는 것을 알았습니다. 대신 코드에서이 유효성 검사를 수행하기위한 단위 테스트를 만들었습니다. 귀하의 답변에 감사드립니다. – MichaelHouse