Dans MySQL, le JSON_CONTAINS_PATH()
La fonction teste si un chemin spécifié est trouvé ou non dans le document JSON donné.
Si le chemin est trouvé, JSON_CONTAINS_PATH()
renvoie 1
, sinon il renvoie 0
.
Syntaxe
La syntaxe ressemble à ceci :
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Où json_doc
est le document JSON, one_or_all
est le mot-clé one
ou all
(pour indiquer si un seul chemin doit exister ou si tous les chemins doivent exister avant de renvoyer 1
), et path
est le chemin réel.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer l'utilisation de base.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
Le chemin $.a
existe dans le document JSON, et par conséquent, le résultat est 1
. Nous avons utilisé one
comme deuxième argument, mais dans ce cas, nous obtiendrions le même résultat si nous avions spécifié all
.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
Si nous spécifions un chemin qui n'existe pas, nous obtenons 0
. Exemple :
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Résultat :
+--------+ | Result | +--------+ | 0 | +--------+
Exemple 2 – Chemins multiples
Dans les exemples suivants, nous spécifions deux chemins.
Dans le premier exemple, un chemin existe mais pas l'autre. Mais parce que j'utilise one
comme deuxième argument, le résultat est positif (car au moins un des chemins existe).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
Si nous changeons one
à all
nous obtenons un résultat négatif.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Résultat :
+--------+ | Result | +--------+ | 0 | +--------+
C'est parce que le all
Le mot-clé exige que tous les chemins existent dans le document JSON avant de renvoyer un 1
.
Exemple 3 - Notation par points
Vous pouvez utiliser la notation par points pour indiquer des chemins spécifiques dans le document JSON.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
Exemple 4 – Tableaux
Voici quelques exemples de tableaux.
Le premier exemple renvoie un résultat positif.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
L'exemple suivant renvoie un résultat négatif.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Résultat :
+--------+ | Result | +--------+ | 0 | +--------+
Cela renvoie négatif car les tableaux utilisent une numérotation basée sur zéro. Par conséquent, le chemin $.c[3]
représente le quatrième élément, mais le tableau ne contient que trois éléments.