Agradeceríamos tu apoyo para extender nuestros artículos en referencia a las ciencias informáticas.
Solución:
En el borrador-04, usaría la directiva anyOf:
"anyOf": [
"type": "number",
"minimum": 0,
"maximum": 360,
"exclusiveMaximum": true
,
"type": "null"
]
También podrías usar “tipo”: [“number”, “null”] como sugiere Adam, pero creo que anyOf es más limpio (siempre que use una implementación draft-04), y vincula la declaración mínima y máxima al número explícitamente.
Descargo de responsabilidad: no sé nada sobre la implementación de python, mi respuesta es sobre el esquema json.
El truco es usar un tipo array. En vez de:
"type": "number"
Usar:
"type": ["number", "null"]
El siguiente código impone un número-o-null política, más restricciones numéricas si el valor es un número:
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
Lo que da:
"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
Sección de Reseñas y Valoraciones
Recuerda algo, que te concedemos añadir un criterio objetivo si te fue de ayuda.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)