Saltar al contenido principal
Versión: 21 R4 BETA

JSON Validate

JSON Validate ( vJson : Object, Collection ; vSchema : Object ) : Object

ParámetrosTipoDescripción
vJsonObject, Collection→Objeto o colección JSON que se va a validar
vSchemaObject→Esquema JSON utilizado para validar objetos JSON
ResultadoObject←Estado de la validación y errores (si los hay)
Historia
LanzamientoModificaciones
21 R2Compatibilidad con JSON Schema draft 2020-12
16 R4Creado

Descripción​

El comando JSON Validate comprueba que el contenido JSON de vJson cumple las reglas definidas en el esquema JSON vSchema. Si el JSON no es válido, el comando devuelve una descripción detallada de los errores.

En vJson, pase un objeto JSON que contenga los datos JSON que se van a validar.

Nota: Validar una cadena JSON consiste en comprobar que sigue las reglas definidas en un esquema JSON. Esto es distinto de comprobar que el JSON está bien formado, lo que realiza el comando JSON Parse.

En vSchema, pase el esquema JSON que se utilizará para la validación. Para obtener más información sobre cómo crear un esquema JSON, consulte el sitio web json-schema.org.

Drafts de validación JSON Schema compatibles​

Para validar un objeto JSON, 4D utiliza la norma descrita en un documento draft de JSON Schema Validation. A lo largo del tiempo se han publicado varias versiones de estos documentos.

4D admite dos versiones del draft:

  • versión 2020-12 (recomendada). Se admiten todas las partes de la norma, excepto:
    • vocabulary
    • contentEncoding, contentMediaType y contentSchema (validación de contenido que no es JSON)
    • para las referencias: $dynamicRef/$dynamicAnchor y las referencias en https:...
  • versión 4 (implementación heredada, utilizada por defecto). La compatibilidad con esta norma tiene más limitaciones que la versión 2020-12.

Especificar la versión que se va a utilizar​

La versión que se va a utilizar debe indicarse en el esquema mediante la clave $schema:

  • versión 2020-12:
"$schema": "https://json-schema.org/draft/2020-12/schema",
  • versión 4:
"$schema": "http://json-schema.org/draft-04/schema#",

Por motivos de compatibilidad, se utiliza la versión 4 si se omite la clave $schema. No obstante, se recomienda utilizar la versión 2020-12, que proporciona las validaciones más fiables.

nota

Si declara otra versión del esquema mediante la clave $schema, se devuelve un error.

Resultado de la validación​

Si el esquema JSON no es válido, 4D devuelve un objeto Null y genera un error que puede capturarse mediante un método de gestión de errores.

JSON Validate devuelve un objeto que indica el estado de la validación. Este objeto puede contener las siguientes propiedades:

Nombre de propiedadTipoDescripción
successBooleanTrue si vJson es válido; false en caso contrario. Si es false, también se devuelve la propiedad errors.
errorsObject collectionLista de objetos de error si vJson no es válido (véase más abajo).

Cada objeto de error de la colección errors contiene las siguientes propiedades:

Nombre de propiedadTipoDescripción
codeNumberCódigo de error
jsonPathTextRuta JSON que no se puede validar en vJson
lineNumberNúmero de línea del error en el archivo JSON. Esta propiedad se completa si el JSON se ha analizado con el parámetro * de JSON Parse. De lo contrario, se omite.
messageTextMensaje de error
offsetNumberDesplazamiento de línea del error en el archivo JSON. Esta propiedad se completa si el JSON se ha analizado con el parámetro * de JSON Parse. De lo contrario, se omite.
schemaPathsTextRuta JSON del esquema que provoca el error de validación

Lista de errores​

Details
Se pueden devolver los siguientes errores:
CódigoPalabra clave JSONMensaje
2multipleOfError al validar la clave 'multipleOf'.
3maximumEl valor proporcionado no debe superar el especificado en el esquema ("{s1}").
4exclusiveMaximumEl valor proporcionado debe ser inferior al especificado en el esquema ("{s1}").
5minimumEl valor proporcionado no debe ser inferior al especificado en el esquema ("{s1}").
6exclusiveMinimumEl valor proporcionado debe ser superior al especificado en el esquema ("{s1}").
7maxLengthLa cadena supera la longitud especificada en el esquema.
8minLengthLa cadena no alcanza la longitud especificada en el esquema.
9patternLa cadena "{s1}" no coincide con el patrón del esquema: {s2}.
10additionalItemsError al validar un array. El JSON contiene más elementos de los especificados en el esquema.
11maxItemsEl array contiene más elementos de los especificados en el esquema.
12minItemsEl array contiene menos elementos de los especificados en el esquema.
13uniqueItemsError al validar un array. Los elementos no son únicos. Ya existe otra instancia de "{s1}" en el array.
14maxPropertiesEl número de propiedades supera el especificado en el esquema.
15minPropertiesEl número de propiedades es inferior al especificado en el esquema.
16requiredFalta la propiedad obligatoria "{s1}".
17additionalPropertiesEl esquema no permite propiedades adicionales. Se debe eliminar la(s) propiedad(es) {s1}.
18dependenciesLa propiedad "{s1}" requiere la propiedad "{s2}".
19enumError al validar la clave 'enum'. "{s1}" no coincide con ningún elemento enum del esquema.
20typeTipo incorrecto. El tipo esperado es: {s1}.
21oneOfEl JSON coincide con más de un valor.
22oneOfEl JSON no coincide con ningún valor.
23notEl JSON no es válido frente al valor de 'not'.
24formatLa cadena no coincide con ("{s1}").
25constEl valor "{s1}" no coincide con el valor 'const' del esquema.
26unevalutedPropertiesEl esquema no permite propiedades no evaluadas. Se debe eliminar la(s) propiedad(es) {s1}.
27unevalutedItemsNo se permiten elementos de array no evaluados. El elemento del índice {s1} no está cubierto por ningún esquema.
28propertyNamesEl nombre de propiedad "{s1}" no se valida con el esquema 'propertyNames'.
29containsEl array no contiene elementos que coincidan con el esquema 'contains'.
30containsEl array debe contener al menos {s1} elementos que coincidan con el esquema 'contains', pero solo se encontraron {s2}.
31containsEl array debe contener como máximo {s1} elementos que coincidan con el esquema 'contains', pero se encontraron {s2}.
32requiredLa propiedad "{s1}" requiere que esté presente la propiedad "{s2}".
35prefixItemsLos elementos iniciales del array no coinciden con los esquemas 'prefixItems'.
36dependentSchemasError de validación en 'dependentSchemas'.
37$refNo se pudo resolver la referencia.
38$refSe ha detectado una referencia circular.

Ejemplo​

Desea validar un objeto JSON con un esquema, obtener la lista de errores de validación si los hay y almacenar las líneas y los mensajes de error en una variable de texto:

 var $oResult : Object
 $oResult:=JSON Validate(JSON Parse(myJson;*);mySchema)
 If($oResult.success) //validation successful
    ...
 Else //validation failed
    var $vLNbErr : Integer
    var $vTerrLine : Text
    $vLNbErr:=$oResult.errors.length ///get the number of error(s)
    ALERT(String($vLNbErr)+" validation error(s) found.")
    For($i;0;$vLNbErr)
       $vTerrLine:=$vTerrLine+$oResult.errors[$i].message+" "+String($oResult.errors[$i].line)+Carriage return
    End for
 End if

Ver también​

JSON Parse

Propiedades​

Número de comando1456
Hilo segurosí