In MariaDB, JSON_CONTAINS_PATH() è una funzione incorporata che indica se un determinato documento JSON contiene dati nel percorso o nei percorsi specificati.
Restituisce 1 se il documento contiene dati nel/i percorso/i specificato/i, 0 in caso contrario, e NULL se uno qualsiasi degli argomenti è NULL .
Sintassi
La sintassi è questa:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
Dove json_doc è il documento JSON e il path specifica il percorso per cui trovare i dati. Possono essere forniti più percorsi.
Il return_arg argomento determina come gestire più percorsi. Può essere one o all .
one– La funzione restituisce1se esiste almeno un percorso all'interno del documento JSON.all– La funzione restituisce1solo se tutti i percorsi esistono all'interno del documento JSON.
Esempio
Ecco un esempio da dimostrare.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name'); Risultato:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
In questo caso, il percorso esiste e il risultato è 1 .
Nell'esempio successivo il percorso non esiste e il risultato è 0 :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type'); Risultato:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') | +-----------------------------------------------------+ | 0 | +-----------------------------------------------------+
Percorsi multipli
Ecco alcuni esempi che cercano percorsi multipli all'interno del documento:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result; Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
In questo esempio abbiamo cercato due percorsi. Un percorso esiste e l'altro no. Ma abbiamo un 1 comunque (risultato positivo). Questo perché abbiamo usato one come secondo argomento. Il one specifica che otterremo un 1 se esiste uno dei percorsi.
Ecco cosa succede se utilizziamo all come secondo argomento:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result; Risultato:
+--------+ | Result | +--------+ | 0 | +--------+
Questa volta il risultato è 0 , perché non tutti i percorsi esistono nel documento JSON.
Se cambiamo il percorso mancante ($.type ) rispetto a uno esistente, otteniamo un risultato diverso:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result; Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Array
Ecco un esempio che verifica se un determinato indice esiste all'interno di un array:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result; Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Ed ecco cosa succede se aumentiamo l'indice a uno inesistente:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result; Risultato:
+--------+ | Result | +--------+ | 0 | +--------+
Strutture nidificate
Ecco un esempio che cerca un percorso all'interno di un documento nidificato:
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result; Risultato:
+--------+ | Result | +--------+ | 1 | +--------+
Argomenti nulli
Se un argomento è NULL , il risultato è NULL :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
JSON_CONTAINS_PATH(@json_document, 'one', null) AS c; Risultato:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Conteggio parametri errato
Non fornire argomenti genera un errore:
SELECT JSON_CONTAINS_PATH(); Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'
La stessa cosa accade quando non si passano abbastanza argomenti:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document); Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'