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.