Valide su objeto JSON

Traducido automáticamente de Deepl

Cada vez utilizamos más el formato JSON. Por ejemplo, para guardar los ajustes en un archivo, para almacenar la configuración del software, o para intercambiar datos del cliente en la web con otros servidores.

¿Cómo se puede validar que los datos recibidos están en el formato esperado? ¿Cómo se puede validar que toda la información necesaria está realmente presente? ¿Cómo puedes hacer esta validación sin escribir un método tedioso para cada tipo de formato JSON?

Simplemente escribiendo un esquema JSON y utilizando el JSON Validate ¡nuevo comando!

Preámbulo
Como ya sabrás, hay una diferencia entre un documento XML «bien formado» y un documento XML «válido». Un documento XML con una sintaxis correcta se denomina «Bien Formado» y un documento XML validado contra una DTD es tanto «Bien Formado» como «Válido».
Se puede hacer lo mismo con los documentos JSON. Puedes escribir un esquema JSON para describir tu documento JSON. Para conocer la gramática y la sintaxis del esquema JSON, te aconsejo que vayas al sitio oficial: http://json-schema.org/

Comando JSON Validate

Con el JSON Parse comando, ya puede comprobar que el documento JSON está«bien formado«. Desde 4D v16 R4, el comando JSON Validate le permite verificar que el documento JSON es «Válido» de acuerdo con su esquema JSON.

Ejemplo de base de datos

El nuevo JSON Validate devuelve un objeto. En este objeto, el atributo «success» es un booleano, su valor es verdadero cuando el documento es válido y false cuando el documento es inválido contra el esquema JSON pasado como parámetro. El atributo «errors» es un array de objetos con toda la información para entender y encontrar dónde está el error.

Ejemplo de código

Por ejemplo, utilizamos el siguiente esquema JSON varSchema:

{
     "$schema": "http://json-schema.org/draft-04/schema#",
     "title": "Person",
     "type": "object",
     "properties": {
         "firstName": {
             "type": "string"
         },
         "lastName": {
             "type": "string"
         },
         "gender": {
             "description": "Gender is M or F",
             "enum": [ "M","F" ]
         },
         "birthday": {
             "type": "object",
             "properties": {
                 "day": {"type": "number"},
                 "month": {"type": "number"},
                 "year": {"type": "number"}
             },
             "required": ["day", "month", "year"]
         }
     },
     "required": ["firstName", "lastName"]
 }

Queremos comprobar si el siguiente documento JSON de varJSON es válido:

{
    "firstName": "John",
    "lastName": "Doe",
    "gender": "U" 
}

Así que ejecutamos el siguiente código:

C_OBJECT($oJSON;$oSchema;$oResult)
$oJSON :=JSON Parse(varJSON;*) // New * optional parameter
$oSchema
:=JSON Parse(varSchema)
$oResult
:=JSON Validate($oJSON;
$oSchema )

Nota: cuando se valida un archivo JSON, se quiere recuperar fácilmente la posición del error en el archivo original. Por ello, hemos añadido un parámetro opcional » * » al comando JSON Parse. En este caso, 4D añade la información sobre el número de línea y el valor del offset para cada atributo.

A continuación se muestra lo que se devuelve en el objeto «$oResult» por el JSON Validate comando:

{
    "success": false,
    "errors": [
        {
            "jsonPath": "gender",
            "line": 4,
            "offset": 4,
            "code": 22,
            "msg": "Error while validating against 'enum' key. \"U\" does not match any enum element in the schema.",
            "schemaPaths": "properties.gender.enum"
        }
    ]
}

Nota: La implementación en la v16 R4 soporta esta versión de validación del esquema JSON.

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.