À 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.