JSON_SCHEMA_VALID() în MySQL

Validează un document JSON după o schemă JSON Schema; varianta REPORT explică de ce nu e valid.

Sintaxă
JSON_SCHEMA_VALID(schema, document)
JSON_SCHEMA_VALIDATION_REPORT(schema, document)

Ce face JSON_SCHEMA_VALID()

JSON_SCHEMA_VALID() returnează 1 dacă documentul respectă schema (tipuri, câmpuri obligatorii, intervale) și 0 altfel. Poate fi folosit într-o constrângere CHECK.

JSON_SCHEMA_VALIDATION_REPORT() returnează un raport JSON cu motivul eșecului.

Parametri

Parametru Descriere
schema Schema JSON (standardul Draft 4).
document Documentul verificat.

Ce returnează

1/0, respectiv un raport JSON.

Exemple

Exemplul 1: Câmp obligatoriu lipsă

SET @schema = '{"type": "object", "required": ["nume"], "properties": {"varsta": {"type": "integer", "minimum": 0}}}';

SELECT JSON_SCHEMA_VALID(@schema, '{"nume": "Ana", "varsta": 31}') AS valid,
       JSON_SCHEMA_VALID(@schema, '{"varsta": 31}') AS fara_nume;

Rezultat

+-------+-----------+
| valid | fara_nume |
+-------+-----------+
|     1 |         0 |
+-------+-----------+

Exemplul 2: Motivul exact

SELECT JSON_UNQUOTE(JSON_EXTRACT(
  JSON_SCHEMA_VALIDATION_REPORT('{"type": "object", "required": ["nume"]}', '{"oras": "Iasi"}'),
  '$.reason'
)) AS motiv;

Rezultat

+------------------------------------------------------------------------------------------+
| motiv                                                                                    |
+------------------------------------------------------------------------------------------+
| The JSON document location '#' failed requirement 'required' at JSON Schema location '#' |
+------------------------------------------------------------------------------------------+

Greșeli frecvente

  • Validezi doar în aplicație. O constrângere CHECK (JSON_SCHEMA_VALID(...)) pe coloană garantează că nici alte programe nu salvează date greșite.

Comenzi înrudite

  • JSON_VALID(): Verifică dacă un text este JSON valid (1 sau 0).
  • JSON_TYPE(): Tipul unei valori JSON: OBJECT, ARRAY, STRING, INTEGER, DOUBLE, BOOLEAN, NULL etc.