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 quandoexpr
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.