JSON_OBJECT |
Objet JSON |
|---|---|
| Oracle Database SQL | Oracle 12.2 (12c Release?2) ou supérieure |
Syntaxe
| JSON_OBJECT( [ [ KEY ] key_expr VALUE val_expr [ FORMAT JSON ] ,]... [ JSON_on_null_clause ] [ JSON_returning_clause ] [ STRICT ] [ WITH UNIQUE KEYS ] ) |
Paramètres
| Nom | Description |
|---|---|
| key_expr | Ce paramètre permet d'indiquer l'expression ou la valeur qui sera utilisée comme clef dans l'objet JSON généré. Cette clé devient le nom de la propriété JSON. |
| val_expr | Ce paramètre permet de spécifier la valeur SQL associée à une clef donnée, étant insérée comme contenu de la propriété correspondante dans l'objet JSON. |
| FORMAT JSON | Ce paramètre permet de signaler que la valeur fournie (val_expr) est déjà un fragment JSON valide, évitant ainsi son échappement ou sa double conversion. |
| JSON_on_null_clause | Ce paramètre permet de définir le comportement à adopter face aux valeurs NULL : soit NULL ON NULL (inclure), soit ABSENT ON NULL (exclure). |
| JSON_returning_clause | Ce paramètre permet de spécifier le type SQL dans lequel l'objet JSON généré doit être retourné, tel que RETURNING VARCHAR2 ou RETURNING CLOB. |
| STRICT | Ce paramètre permet de forcer une validation stricte : si une expression ne peut pas être convertie en JSON valide, une erreur est levée. |
| WITH UNIQUE KEYS | Ce paramètre permet de garantir que les clefs dans l'objet JSON sont uniques, ce qui respecte les contraintes du format JSON et évite les redéfinitions. |
| KEY | Ce paramètre permet de rendre explicite le rôle de l'expression comme clef dans la paire KEY key_expr VALUE val_expr, améliorant la lisibilité. |
Description
Cette fonction permet de créer un objet JSON à partir de paires clef/valeur fournies en entrée. Chaque clef correspond à une propriété de l'objet JSON, associée à sa valeur SQL correspondante.
Remarques
- Fonction de génération JSON intégrée : La fonction JSON_OBJECT permet de générer dynamiquement un objet JSON directement depuis une requête SQL. Cela évite les constructions manuelles de chaînes et simplifie grandement la production de contenu JSON structuré à partir de données relationnelles.
- Utilisation flexible des clefs et valeurs : Grâce à la syntaxe KEY key_expr VALUE val_expr, il est possible de définir explicitement chaque paire clef-valeur. Cette approche rend la construction de l'objet JSON claire et lisible, même lorsque les clés sont dynamiques ou issues de calculs.
- Traitement explicite des NULL : L'option JSON_on_null_clause permet de contrôler la manière dont les valeurs NULL sont traitées. On peut choisir de les inclure dans l'objet JSON (avec une valeur null) ou de les omettre entièrement, ce qui est crucial pour adapter le résultat aux besoins du client ou de l'application.
- Contrôle du type de retour : Avec JSON_returning_clause, on peut spécifier le format de retour SQL de la sortie JSON, comme VARCHAR2, CLOB, ou BLOB. Cela permet d'adapter le type à la taille ou à l'usage prévu du document JSON, notamment pour les grandes structures.
- Validation stricte possible : Le mot clef STRICT force Oracle à vérifier que chaque élément est bien conforme au format JSON. En cas d'incohérence, une erreur est renvoyée, ce qui est utile pour garantir l'intégrité du JSON généré avant de le transmettre ou de l'entreposer.
- Respect du standard JSON avec clefs uniques : L'option WITH UNIQUE KEYS empêche les duplications de clefs dans l'objet JSON. C'est essentiel dans des cas où les expressions peuvent générer des clefs dynamiques, évitant ainsi les conflits ou pertes de données.
- Support des fragments JSON natifs : Le mot clef FORMAT JSON signale que la valeur donnée est déjà un fragment JSON valide. Cela évite qu'Oracle l'encapsule ou l'échappe, permettant ainsi d'intégrer proprement des sous-structures JSON dans l'objet global.
- Construction multi-paires facilitée : Il est possible d'enchaîner plusieurs paires clef-valeur dans un seul appel à JSON_OBJECT. Cette capacité permet de construire des objets complexes en une seule instruction SQL, sans avoir recours à des fonctions PL/SQL externes.
- Compatibilité avec des champs dynamiques : key_expr peut être une expression, et non juste une constante. Cela permet de construire des objets JSON avec des noms de propriétés déterminés dynamiquement, par exemple à partir de données en base.
- Utilité dans les API REST : Dans les architectures orientées services, JSON_OBJECT est utile pour structurer les réponses JSON directement depuis des vues ou des procédures SQL, sans avoir besoin d'un middleware ou d'un code applicatif pour faire la transformation.
- Lisibilité accrue avec le mot-clef KEY : Même si KEY est optionnel, son utilisation explicite améliore la compréhension du code SQL, surtout quand il y a plusieurs paires clef-valeur. Cela facilite le travail en équipe ou la maintenance des requêtes complexes.
- Évolution naturelle de l'agrégation JSON : Combinée à d'autres fonctions comme JSON_ARRAYAGG, la fonction JSON_OBJECT permet de construire des documents JSON hiérarchiques (objets contenant des tableaux, ou inversement), directement en SQL. Cela simplifie énormément les requêtes destinées à produire du JSON structuré.
Dernière mise à jour : Dimanche, le 29 Juin 2025