Lors de l'utilisation de SQLite, nous pouvons utiliser les méthodes suivantes pour extraire des données d'un document JSON.
Le json_extract()
Fonction
Comme son nom l'indique, le json_extract()
la fonction extrait et renvoie une ou plusieurs valeurs à partir d'un JSON bien formé.
Exemple :
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1]'
);
Résultat :
{"name":"Bark","scores":[3,4,8,7]}
Les tableaux sont basés sur zéro, et donc le décompte commence à 0
. Par conséquent, nous avons spécifié [1]
pour obtenir le deuxième élément dans le dogs
tableau, qui se trouve être un objet JSON.
Nous pouvons renvoyer uniquement le nom du chien à cette position dans le tableau en ajoutant à notre chemin :
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].name'
);
Résultat :
Bark
Nous pouvons utiliser json_extract()
pour renvoyer plusieurs chemins :
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[0].name',
'$.dogs[1].name',
'$.dogs[2].name'
);
Résultat :
["Wag","Bark","Woof"]
Lorsque nous extrayons des valeurs de plusieurs chemins, les valeurs sont renvoyées dans un tableau.
Le ->
Opérateur
Le ->
extrait un sous-composant d'un document JSON et renvoie une représentation JSON de ce sous-composant.
Par conséquent, nous pouvons remplacer le premier exemple par ceci :
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1]';
Résultat :
{"name":"Bark","scores":[3,4,8,7]}
Le ->
L'opérateur est subtilement différent de json_extract()
fonction :
- Le
->
L'opérateur renvoie toujours une représentation JSON du sous-composant. - Le
json_extract()
La fonction ne renvoie JSON que s'il existe deux arguments de chemin ou plus (car le résultat est alors un tableau JSON) ou si l'argument de chemin unique fait référence à un tableau ou à un objet. - S'il n'y a qu'un seul argument de chemin et que ce chemin fait référence à un null JSON ou à une chaîne ou à une valeur numérique, alors
json_extract()
renvoie la valeur SQL NULL, TEXT, INTEGER ou REAL correspondante.
Par conséquent, voici ce qui se passe lorsque nous extrayons le nom d'un chien de notre JSON :
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1].name';
Résultat :
"Bark"
Cette fois, il est entouré de guillemets. C'est parce qu'il a renvoyé une représentation JSON de la valeur. Lorsque nous avons extrait la même valeur avec json_extract()
auparavant, nous obtenions une représentation SQL de la valeur.
Cependant, nous pouvons également utiliser le ->>
opérateur pour retourner une représentation SQL.
Le ->>
Opérateur
Le ->>
l'opérateur fonctionne de la même manière que le ->
opérateur, sauf que ->>
renvoie une représentation SQL du sous-composant spécifié. Plus précisément, il renvoie un SQL TEXT
, INTEGER
, REAL
, ou NULL
valeur qui représente le sous-composant sélectionné, ou NULL
si le sous-composant n'existe pas.
Par conséquent, voici ce qui se passe lorsque nous utilisons le ->>
opérateur pour extraire le nom du chien :
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' ->> '$.dogs[1].name';
Résultat :
Bark
Il n'est plus entre guillemets.