In MySQL, il JSON_CONTAINS_PATH() la funzione verifica se un percorso specificato viene trovato o meno nel documento JSON specificato.
Se viene trovato il percorso, JSON_CONTAINS_PATH() restituisce 1 , altrimenti restituisce 0 .
Sintassi
La sintassi è questa:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Dove json_doc è il documento JSON, one_or_all è la parola chiave one o all (per indicare se è necessario un solo percorso o devono esistere tutti i percorsi prima di restituire 1 ), e path è il percorso effettivo.
Esempio 1 – Utilizzo di base
Ecco un esempio per dimostrare l'utilizzo di base.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Il percorso $.a esiste nel documento JSON e, pertanto, il risultato è 1 . Abbiamo usato one come secondo argomento, ma in questo caso otterremmo lo stesso risultato se avessimo specificato all .
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Se specifichiamo un percorso che non esiste otteniamo 0 . Esempio:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Risultato:
+--------+ | Result | +--------+ | 0 | +--------+
Esempio 2 – Percorsi multipli
Negli esempi seguenti specifichiamo due percorsi.
Nel primo esempio, esiste un percorso ma l'altro no. Ma perché io uso one come secondo argomento, il risultato è positivo (perché esiste almeno uno dei percorsi).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Se cambiamo one a all otteniamo un risultato negativo.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Risultato:
+--------+ | Result | +--------+ | 0 | +--------+
Questo perché all la parola chiave richiede che tutti i percorsi debbano esistere nel documento JSON prima di restituire un 1 .
Esempio 3 – Notazione del punto
Puoi utilizzare la notazione a punti per indicare percorsi specifici all'interno del documento JSON.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Esempio 4 – Matrici
Ecco un paio di esempi di array.
Il primo esempio restituisce un risultato positivo.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
L'esempio successivo restituisce un risultato negativo.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Risultato:
+--------+ | Result | +--------+ | 0 | +--------+
Restituisce negativo perché le matrici utilizzano la numerazione in base zero. Pertanto, il percorso $.c[3] rappresenta il quarto elemento, ma l'array contiene solo tre elementi.