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

Opérateurs pour l'extraction de sous-composants JSON

À 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

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.