Dans MySQL, le JSON_CONTAINS()
La fonction teste si une valeur spécifiée est trouvée ou non dans le document JSON donné ou, éventuellement, au chemin spécifié dans le document.
Si la valeur est trouvée, JSON_CONTAINS()
renvoie 1
, sinon il renvoie 0
.
Syntaxe
La syntaxe ressemble à ceci :
JSON_CONTAINS(target, candidate[, path])
La fonction renvoie 1
ou 0
selon qu'un candidate
donné Le document JSON est contenu dans une target
Document JSON, ou—s'il s'agit d'un path
argument a été fourni - si le candidat se trouve à un chemin spécifique dans la cible.
Exemple 1 – Deux arguments
Voici un exemple pour illustrer l'utilisation de base sans spécifier de chemin (c'est-à-dire en fournissant deux arguments uniquement).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
Notez les accolades autour du deuxième argument. Ceux-ci sont nécessaires pour rendre le JSON valide. Si nous omettons les accolades, nous nous retrouverons avec une erreur :
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Résultat :
ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.
Exemple 2 – Trois arguments
Dans cet exemple, j'ajoute un troisième argument, pour indiquer un chemin spécifique pour lequel trouver le deuxième argument dans le premier argument.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+
Dans ce cas, le deuxième argument a été trouvé dans le premier argument au chemin spécifié par le troisième argument.
S'il n'était pas trouvé, nous nous retrouverions avec ceci :
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Résultat :
+--------+ | Result | +--------+ | 0 | +--------+
Exemple 3 - Notation par points
Vous pouvez utiliser la notation par points pour indiquer des chemins spécifiques dans le document JSON.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Résultat :
+--------+ | Result | +--------+ | 1 | +--------+