À partir de la version 3.38.0 de SQLite (publiée le 22 février 2022), nous pouvons désormais utiliser le -> et ->> opérateurs pour extraire des sous-composants de documents JSON.
Le but avec ces opérateurs est d'être compatible avec les opérateurs MySQL et PostgreSQL équivalents.
De plus, à partir de SQLite 3.38.0, les fonctions JSON sont désormais intégrées. Par conséquent, il n'est plus nécessaire d'utiliser le -DSQLITE_ENABLE_JSON1 option de compilation pour activer la prise en charge de JSON.
Syntaxe
Le fonctionnement de ces opérateurs est le suivant :
json -> path
json ->> path
Où json est le document JSON et le path est le chemin que nous voulons en extraire.
Nous fournissons donc un document JSON à gauche de l'opérateur, et nous spécifions le chemin que nous voulons extraire à sa droite.
Voici la différence entre ces opérateurs :
- Le
->L'opérateur renvoie toujours une représentation JSON du sous-composant spécifié - Le
->>L'opérateur renvoie toujours une représentation SQL du sous-composant spécifié
Exemple de -> Opérateur
Voici un exemple simple pour montrer comment le -> l'opérateur fonctionne :
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$'; Résultat :
{"name":"Wag","type":"Dog"}
Dans ce cas, j'ai spécifié un chemin de '$' qui renvoie le document entier.
Spécifiez un autre chemin :
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type'; Résultat :
"Dog"
Nous pouvons aussi le faire comme ceci :
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type'; Résultat :
"Dog"
Exemple de ->> Opérateur
Voici ce qui se passe lorsque nous utilisons ->> à la place :
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Résultat :
Dog
La valeur n'est pas citée comme avant. C'est parce que -> renvoie une représentation JSON du sous-composant et ->> renvoie une représentation SQL.
Le ->> renvoie une valeur SQL TEXT, INTEGER, REAL ou NULL qui représente le sous-composant sélectionné, ou NULL si le sous-composant n'existe pas.
Voici un exemple avec un tableau :
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]'; Résultat :
5
Si la valeur consiste uniquement en un tableau, nous pouvons faire ceci :
SELECT '[ 9, 7, 5 ]' ->> '2'; Résultat :
5
Cela renvoie l'élément de tableau à l'index spécifié (dans ce cas 2).
Les tableaux sont basés sur zéro (le comptage commence à 0 ), et c'est pourquoi 2 renvoie le troisième élément.