반응형
JSON Schema: number-or-null 값을 확인합니다.
JSON 스키마 속성을 숫자로 하거나null
?
API를 구축하고 있습니다.heading
기여하다.0(포함)에서 360(포함) 사이의 숫자 또는 null을 사용할 수 있으므로 다음 입력은 정상입니다.
{"heading": 5}
{"heading": 0}
{"heading": null}
{"heading": 12}
{"heading": 120}
{"heading": null}
또한 다음 입력이 잘못되어 있습니다.
{"heading": 360}
{"heading": 360.1}
{"heading": -5}
{"heading": false}
{"heading": "X"}
{"heading": 1200}
{"heading": false}
부록:
anyOf
확실히 정답입니다.알기 쉽게 하기 위해 전체 스키마를 추가합니다.
스키마
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"additionalProperties": false,
"properties": {
"heading": {
"anyOf": [
{"type": "number"},
{"type": "null"}
]
}
}
}
draft-04에서는 anyOf 디렉티브를 사용합니다.
{
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 360,
"exclusiveMaximum": true
},
{
"type": "null"
}
]
}
Adam의 제안대로 "type" : [ number ], "null"을 사용할 수도 있지만, (draft-04 구현을 사용하는 한) anyOf가 더 깔끔하고 최소 선언과 최대 선언을 숫자에 명시적으로 관련지을 수 있습니다.
면책사항:저는 python 구현에 대해 아는 것이 없습니다.제 대답은 json 스키마에 관한 것입니다.
비결은 유형 배열을 사용하는 것입니다.대신:
"type": "number"
용도:
"type": ["number", "null"]
다음 코드는 number-or-null 정책을 적용하고 값이 숫자일 경우 숫자 제한을 적용합니다.
from jsonschema import validate
from jsonschema.exceptions import ValidationError
import json
schema=json.loads("""{
"$schema": "http://json-schema.org/schema#",
"description": "Schemas for heading: either a number within [0, 360) or null.",
"title": "Tester for number-or-null schema",
"properties": {
"heading": {
"type": ["number", "null"],
"exclusiveMinimum": false,
"exclusiveMaximum": true,
"minimum": 0,
"maximum": 360
}
}
}""")
inputs = [
{"heading":5}, {"heading":0}, {"heading":360}, {"heading":360.1},
{"heading":-5},{"heading":None},{"heading":False},{"heading":"X"},
json.loads('''{"heading":12}'''),json.loads('''{"heading":120}'''),
json.loads('''{"heading":1200}'''),json.loads('''{"heading":false}'''),
json.loads('''{"heading":null}''')
]
for input in inputs:
print "%-30s" % json.dumps(input),
try:
validate(input, schema)
print "OK"
except ValidationError as e:
print e.message
그 결과:
{"heading": 5} OK
{"heading": 0} OK
{"heading": 360} 360.0 is greater than or equal to the maximum of 360
{"heading": 360.1} 360.1 is greater than or equal to the maximum of 360
{"heading": -5} -5.0 is less than the minimum of 0
{"heading": null} OK
{"heading": false} False is not of type u'number', u'null'
{"heading": "X"} 'X' is not of type u'number', u'null'
{"heading": 12} OK
{"heading": 120} OK
{"heading": 1200} 1200.0 is greater than or equal to the maximum of 360
{"heading": false} False is not of type u'number', u'null'
{"heading": null} OK
언급URL : https://stackoverflow.com/questions/22565005/json-schema-validate-a-number-or-null-value
반응형
'programing' 카테고리의 다른 글
Oracle의 모든 테이블 목록을 가져오시겠습니까? (0) | 2023.03.02 |
---|---|
MySQL 가져오기 인코딩 문제 - 다시 확인 (0) | 2023.03.02 |
SyntaxError: 식이 필요한데 '<'이(가) 수신되었습니다. (0) | 2023.03.02 |
NextJs와 CreateReact App의 차이점은 무엇입니까? (0) | 2023.03.02 |
다른 TypeScript 파일을 Import하려면 어떻게 해야 하나요? (0) | 2023.02.25 |