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"
}
}
}
}
}
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í:Con este esquema JSON modificado, los datos JSON dados con la clave
"sensor_aaaa"
no pasarían la validación, como se esperaba.