다른 유형의 항목 배열에 대한 JSON 스키마 수정
JSON 아이템이 정렬되어 있지 않습니다.https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-03#section-5.5 사양에 따르면 다음 json 스키마는 어레이 내의 개체가 해당 순서로 표시되는지 여부만 검증합니다.순서를 지정할 필요는 없습니다.순서나 개체 수에 관계없이 어레이 내의 개체를 검증하기만 하면 됩니다.명세서를 보면 어떻게 하는지 이해할 수 없을 것 같아요.
"transactions" : {
"type" : "array",
"items" : [
{
"type" : "object",
"properties" : {
"type" : {
"type" : "string",
"enum" : ["BUILD", "REASSIGN"]
}
}
},
{
"type" : "object",
"properties" : {
"type" : {
"type" : "string",
"enum" : ["BREAK"]
}
}
}
]
}
JSON 스키마 구글그룹에서도 같은 질문을 했더니 바로 답변이 왔습니다.사용자 fge가 여기에 자신의 답변을 게시할 것을 요청했습니다.
안녕하세요.
현재 사양은 초안 v3가 아닌 초안 v4입니다.구체적으로는, 검증의 사양은 다음과 같습니다.
https://datatracker.ietf.org/doc/html/draft-fge-json-schema-validation-00
웹사이트가 최신이 아닌데 왜 그런지...풀 리퀘스트를 제출하겠습니다.
드래프트 v4에서는 다음을 사용할 수 있습니다.
{
"type": "array",
"items": {
"oneOf": [
{"first": [ "schema", "here" ] },
{"other": [ "schema": "here" ] }
]
}
}
예를 들어, 항목이 문자열 또는 정수일 수 있는 배열의 스키마입니다(단, 보다 간단한 방법으로 쓸 수 있습니다).
{
"type": "array",
"items": {
"oneOf": [
{"type": "string"},
{"type": "integer"}
]
}
}
이게 정답이에요.수정된 스키마에는 다음이 포함됩니다.
"transactions" : {
"type" : "array",
"items" : {
"oneOf" : [
{
"type" : "object",
"properties" : {
"type" : {
"type" : "string",
"enum" : ["BUILD", "REASSIGN"]
}
}
},
{
"type" : "object",
"properties" : {
"type" : {
"type" : "string",
"enum" : ["BREAK"]
}
}
}
]
}
}
나도 꽤 오랫동안 이걸 조사해왔어.하지만 효과적인 해결책을 찾지 못했습니다.예를 들어 스키마가 1개만 있으면 정상적으로 동작합니다.
"transactions" : {
"type" : "array",
"items" :
{
"type" : "object",
"properties" : {
"type" : {
"type" : "string",
"enum" : ["BREAK"]
},
}
}
그런 다음 어레이 대괄호를 건너뛰고 개체를 사용합니다.하지만 지금 하고 있는 일을 하고 싶다면 확실한 답은 없는 것 같다.지금까지 알아낸 것은 이것뿐입니다.http://the-long-dark-tech-time.blogspot.se/2012/12/using-json-schema-with-array-of-mixed.html
드래프트 3 스키마를 고수하고 있는 사람을 위해서.초안 4의 "AnyOf"에 해당하는 "Type" 키워드가 있습니다.
이 때문에,
{
"fooBar" : {
"type" : "array",
"items" : {
"type" : [{
"type" : "object",
"properties" : {
"foo" : {
"type" : "string"
}
}
}, {
"type" : "object",
"properties" : {
"bar" : {
"type" : "string"
}
}
}
]
}
}
}
사용자 Vdex에 대한 응답으로, 이는 동일하지 않습니다.작성한 내용은 어레이 요소가 어레이 내에서 특정 순서로 발생함을 의미합니다.
이 스키마 검증기를 사용하는 경우 올바르게 구현될 수 있습니다.
이 스키마의 경우:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "array",
"items": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
}
]
}
이 JSON은 다음과 같이 검증됩니다.
[
true,
5,
"a",
"6",
"a",
5.2
]
하지만 이건 아니야
[
5,
true,
"a",
"6",
"a",
5.2
]
따라서 "One Of"와 같은 키워드와는 목적이 전혀 다릅니다.
이 경우 배열의 첫 번째 요소는 특정 형식을 가지며 나머지 요소는 다른 형식을 갖습니다.제 솔루션은 다음과 같습니다.
my_schema = {
"type": "object",
"properties": {
"token": {"type": "string"},
"service_id": {"type": "string"},
"promo_code": {"type": "string"},
"path": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"address": {"type": "string"},
"lat": {"type": "number"},
"lng": {"type": "number"}
},
"required": ["address", "lat", "lng"]
},
{
"type": "object",
"properties": {
"address": {"type": "string"},
"lat": {"type": "number"},
"lng": {"type": "number"},
"district_id": {"type": "number"},
"ward_code": {"type": "number"},
"weight": {"type": "number"}
},
"required": ["address","lat", "lng","ward_code",
"district_id", "weight"]
}
]
}
},
"required": ["token", "service_id", "path"]
}
위의 스키마는 경로의 두 번째 요소에서 group_id, ward_code, weight가 필요함을 의미합니다.
언급URL : https://stackoverflow.com/questions/15396251/correct-json-schema-for-an-array-of-items-of-different-type
'programing' 카테고리의 다른 글
워드프레스:태그 페이지에서 태그 슬러그를 얻는 방법 (0) | 2023.03.31 |
---|---|
jQuery - $(문서)를 여러 개 갖는 것은 좋지 않습니다.ready(function() {}); (0) | 2023.03.31 |
TypeScript를 사용하여 useState React Hook에서 유형 설정 (0) | 2023.03.31 |
「 」를 「 」를 「 」를 제스트 시험을 지원해주실 수 있나요? (0) | 2023.03.31 |
스프링 OAuth redirect_uri가 https를 사용하지 않음 (0) | 2023.03.31 |