es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar patternProperties en Json Schema

Mi formato json es:

{
    "group_1": {
        "sensor_1": {},
        "sensor_2": {}
    },
    "group_2": {
        "sensor_1": {},
        "sensor_2": {}
    }
}

y el esquema json es:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "patternProperties": {
        "^(group[0-9]+)$": {
            "type": "object",
            "patternProperties": {
                "^(sensor[0-9]+)$": {
                    "type": "object"
                }
            }
        }
    },
    "additionalProperties": false
}

Si mis datos json son los siguientes, la clave “sensor_aaaa” todavía se verifica correctamente, pero quiero que falle.

{
    "group_1":{
        "sensor_1":{

        },
        "sensor_2":{

        },
        "sensor_aaaa":{

        }
    }
}

Si agrego la clave “group_aaaa” en el primer nivel, puede fallar la verificación, entonces, ¿por qué la clave “sensor_aaaa” se verifica correctamente? ¿Cómo puedo modificar mi esquema json?

{
    "group_1":{
        "sensor_1":{

        },
        "sensor_2":{

        }
    },
    "group_aaaa":{
        "sensor_1":{

        },
        "sensor_2":{

        }
    }
}

¡Gracias!
(Lo siento, mi inglés no es muy bueno >__<)

Oh…

Olvidé agregar (“additionalProperties”: false).
El siguiente esquema json se puede verificar correctamente.

{
    "$schema": "http://json-schema.org/draft-06/schema#",
    "type": "object",
    "additionalProperties": false,
    "patternProperties": {
        "^(group_[0-9]+)$": {
            "additionalProperties": false,
            "type": "object",
            "patternProperties": {
                "^(sensor_[0-9]+)$": {
                    "type": "object"
                }
            }
        }
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el esquema JSON dado es que no tiene la restricción "additionalProperties": false en el objeto de nivel superior. Esto permite que cualquier clave que no coincida con el patrón especificado sea válida. Para solucionar esto, la restricción "additionalProperties": false se puede agregar también al objeto de nivel superior. El esquema JSON modificado se vería así:

    {
      "$schema": "http://json-schema.org/draft-06/schema#",
      "type": "object",
      "additionalProperties": false,
      "patternProperties": {
        "^(group_[0-9]+)$": {
          "type": "object",
          "additionalProperties": false,
          "patternProperties": {
            "^(sensor_[0-9]+)$": {
              "type": "object"
            }
          }
        }
      }
    }
    

    Con este esquema JSON modificado, los datos JSON dados con la clave "sensor_aaaa" no pasarían la validación, como se esperaba.

Comments are closed.