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

Fonction JSON_OBJECT() dans Oracle

Dans Oracle Database, le JSON_OBJECT() La fonction crée un objet JSON à partir d'une séquence de paires clé-valeur ou d'une instance de type d'objet.

Syntaxe

La syntaxe ressemble à ceci :

JSON_OBJECT
  ( [ [ KEY ] key_expr VALUE val_expr [ FORMAT JSON ]
     ,]...
    [ JSON_on_null_clause ] [ JSON_returning_clause ]
    [ STRICT ] 
    [ WITH UNIQUE KEYS ]  )

Où :

  • [ KEY ] key_expr VALUE val_expr spécifie une paire clé-valeur de propriété.
  • FORMAT JSON indique que la chaîne d'entrée est JSON et ne sera donc pas entre guillemets dans la sortie.
  • JSON_on_null_clause spécifie le comportement à utiliser lorsque expr équivaut à null (c'est-à-dire inclure ou non des valeurs nulles dans la sortie).
  • JSON_returning_clause spécifie le type de valeur de retour.
  • STRICT vérifie si la sortie de la fonction de génération JSON est correcte ou non JSON. Si la vérification échoue, une erreur de syntaxe est générée.
  • WITH UNIQUE KEYS garantit que les objets JSON générés ont des clés uniques.

Exemple

Voici un exemple pour illustrer son fonctionnement :

SELECT JSON_OBJECT(KEY 'score' VALUE 37) FROM DUAL;

Résultat :

{"score":37}

La KEY part est facultatif, donc ce qui suit produit le même résultat :

SELECT JSON_OBJECT('score' VALUE 37) FROM DUAL;

Résultat :

{"score":37}

Plusieurs paires clé/valeur

Voici un exemple avec plusieurs paires clé/valeur :

SELECT JSON_OBJECT(
    KEY 'fname' VALUE 'Homer',
    KEY 'lname' VALUE 'Escobar',
    KEY 'score' VALUE 237
    ) 
FROM DUAL;

Résultat :

{"fname":"Homer","lname":"Escobar","score":237}

JSON imbriqué

Si l'une des valeurs que vous transmettez contient JSON, vous pouvez utiliser le FORMAT JSON argument pour spécifier qu'il contient JSON et ne doit pas être entre guillemets dans la sortie.

Exemple :

SELECT JSON_OBJECT(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}' 
    FORMAT JSON
    ) 
FROM DUAL;

Résultat :

{"details":{"name": "Peter", "score": 64}}

Voici ce qui se passe si nous supprimons le FORMAT JSON partie :

SELECT JSON_OBJECT(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}'
    ) 
FROM DUAL;

Résultat :

{"details":"{\"name\": \"Peter\", \"score\": 64}"} 

Exemple de base de données

Supposons que nous lancions la requête suivante :

SELECT *
FROM regions;

Résultat :

   REGION_ID               REGION_NAME 
____________ _________________________ 
           1 Europe                    
           2 Americas                  
           3 Asia                      
           4 Middle East and Africa    

Voici la même requête, mais avec les colonnes sélectionnées passées au JSON_OBJECT() fonction :

SELECT JSON_OBJECT(*) 
FROM regions;

Résultat :

{"REGION_ID":1,"REGION_NAME":"Europe"}                    
{"REGION_ID":2,"REGION_NAME":"Americas"}                  
{"REGION_ID":3,"REGION_NAME":"Asia"}                      
{"REGION_ID":4,"REGION_NAME":"Middle East and Africa"}

Et le voici avec une seule colonne passée à la fonction :

SELECT JSON_OBJECT(region_name) 
FROM regions;

Résultat :

{"region_name":"Europe"}                    
{"region_name":"Americas"}                  
{"region_name":"Asia"}                      
{"region_name":"Middle East and Africa"} 

Voir la documentation d'Oracle pour une explication plus détaillée de cette fonction.