Oracle
 sql >> Database >  >> RDS >> Oracle

JSON_OBJECT() Funzione in Oracle

In Oracle Database, il JSON_OBJECT() La funzione crea un oggetto JSON da una sequenza di coppie chiave-valore o da un'istanza del tipo di oggetto.

Sintassi

La sintassi è questa:

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

Dove:

  • [ KEY ] key_expr VALUE val_expr specifica una coppia chiave-valore della proprietà.
  • FORMAT JSON indica che la stringa di input è JSON e quindi non sarà tra virgolette nell'output.
  • JSON_on_null_clause specifica il comportamento da utilizzare quando expr equivale a null (ovvero includere o meno valori null nell'output).
  • JSON_returning_clause specifica il tipo di valore restituito.
  • STRICT controlla se l'output della funzione di generazione JSON è JSON corretto o meno. Se il controllo fallisce, viene generato un errore di sintassi.
  • WITH UNIQUE KEYS garantisce che gli oggetti JSON generati abbiano chiavi univoche.

Esempio

Ecco un esempio per dimostrare come funziona:

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

Risultato:

{"score":37}

Il KEY parte è facoltativa, quindi quanto segue ottiene lo stesso risultato:

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

Risultato:

{"score":37}

Più coppie chiave/valore

Ecco un esempio con più coppie chiave/valore:

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

Risultato:

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

JSON nidificato

Se uno dei valori passati contiene JSON, puoi utilizzare FORMAT JSON argomento per specificare che contiene JSON e non deve essere citato nell'output.

Esempio:

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

Risultato:

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

Ecco cosa succede se rimuoviamo il FORMAT JSON parte:

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

Risultato:

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

Esempio di database

Supponiamo di eseguire la seguente query:

SELECT *
FROM regions;

Risultato:

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

Ecco la stessa query, ma con le colonne selezionate passate a JSON_OBJECT() funzione:

SELECT JSON_OBJECT(*) 
FROM regions;

Risultato:

{"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"}

Ed eccolo con una sola colonna passata alla funzione:

SELECT JSON_OBJECT(region_name) 
FROM regions;

Risultato:

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

Consulta la documentazione di Oracle per una spiegazione più dettagliata di questa funzione.