Le SQLite json_object()
La fonction renvoie un objet JSON bien formé en fonction de ses arguments.
La fonction accepte zéro ou plusieurs paires d'arguments et renvoie un objet JSON bien formé basé sur ces arguments.
Syntaxe
json_object(label1,value1,...)
Où label1, value2, ...
représente les paires étiquette/valeur.
Exemple
Voici un exemple simple pour illustrer :
SELECT json_object( "name", "Igor", "age", 35 );
Résultat :
{"name":"Igor","age":35}
Passer des objets JSON
La transmission d'un argument avec le type SQL TEXT donne une chaîne JSON entre guillemets, toutes les étiquettes entre guillemets étant échappées :
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' );
Résultat :
{"user":"{ \"nom\" :\"igor\", \"age\" :35 }"}
Si nous ne voulons pas que cela se produise, nous pouvons utiliser le json()
fonction pour fournir la valeur en tant que document JSON valide :
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') );
Résultat :
{"user":{"name":"igor","age":35}}
Une autre façon de le faire est d'utiliser le ->
de SQLite opérateur :
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' );
Résultat :
{"user":{"name":"igor","age":35}}
Alternativement, nous pouvons utiliser un autre json_object()
fonction :
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) );
Résultat :
{"user":{"name":"Igor","age":35}}
Le voici avec quelques autres valeurs :
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
);
Résultat :
{"a":1,"user":{"name":"Igor","age":35},"b":2}
Transmettre des tableaux JSON
C'est la même chose lors du passage de tableaux JSON :
SELECT json_object( "scores", '[ 9, 4, 7 ]' );
Résultat :
{"scores":"[ 9, 4, 7 ]"}
Dans ce cas, la valeur est une chaîne qui ressemble à un tableau.
Pour retourner un tableau JSON réel, nous pouvons passer notre argument au json()
fonction :
SELECT json_object( "scores", json('[ 9, 4, 7 ]') );
Résultat :
{"scores":[9,4,7]}
On peut aussi utiliser le ->
opérateur :
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' );
Résultat :
{"scores":[9,4,7]}
Alternativement, nous pouvons passer les valeurs au json_array()
fonction :
SELECT json_object( "scores", json_array( 9, 4, 7 ) );
Résultat :
{"scores":[9,4,7]}
Le voici avec d'autres paires nom/valeur :
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
);
Résultat :
{"name":"Bruno","scores":[9,4,7],"age":25}
Créer un objet vide
Appel de json_object()
sans passer aucun argument donne un objet vide :
SELECT json_object();
Résultat :
{}Étiquettes en double
Au moment de la rédaction,
json_object()
accepte les étiquettes en double sans problème. Par conséquent, nous pouvons faire des choses comme ceci :SELECT json_object( "b", 1, "b", 2 );
Résultat :
{"b":1,"b":2}Mais la documentation de SQLite indique que ce n'est pas toujours le cas - les futures versions de SQLite pourraient ne pas prendre en charge de tels scénarios.
Exemple de base de données
Nous pouvons utiliser
json_object()
lors de la récupération des données d'une base de données.Supposons que nous lancions la requête suivante :
SELECT * FROM Pets;
Résultat :
+-------+---------+--------+| ID animal | NomAnimal | TypeId |+-------+---------+--------+| 1 | Homère | 3 || 2 | Japper | 1 || 3 | Fluff | 2 || 4 | Brosse | 4 |+-------+---------+--------+Nous pouvons voir qu'il y a trois colonnes, et nous pouvons voir leurs noms.
Nous pouvons utiliser le
json_object()
fonction sur cette table comme ceci :SELECT json_object( 'PetId', PetId, 'PetName', PetName, 'TypeId', TypeId ) FROM Pets;
Résultat :
{"PetId":1,"PetName":"Homer","TypeId":3}{"PetId":2,"PetName":"Yelp","TypeId":1}{"PetId":3,"PetName":"Fluff","TypeId":2}{"PetId":4,"PetName":"Brosse","TypeId":4}Ici, j'ai spécifié explicitement les noms d'étiquettes, puis j'ai utilisé les colonnes réelles de la base de données pour les valeurs. Chaque ligne devient un document JSON et chaque colonne devient une paire clé/valeur dans ce document JSON.
Nous pouvons également utiliser le
json_group_array()
fonction pour enfermer les documents dans un tableau :SELECT json_group_array( json_object( 'PetId', PetId, 'PetName', PetName, 'TypeId', TypeId ) ) FROM Pets;
Résultat :
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{" PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brosse","TypeId":4}]