Mysql
 sql >> Base de données >  >> RDS >> Mysql

JSON_CONTAINS_PATH() Exemples dans MySQL

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] ...)

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.