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.