In Oracle Database, il JSON_OBJECTAGG()
La funzione crea un oggetto JSON da una coppia chiave-valore.
In genere, la chiave della proprietà, il valore della proprietà o entrambi sono colonne di espressioni SQL.
Sintassi
La sintassi è questa:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_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_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Risultato:
{"score":37}
Il KEY
parte è facoltativa, quindi quanto segue ottiene lo stesso risultato:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Risultato:
{"score":37}
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_OBJECTAGG(
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_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Risultato:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Esempio di database
Il JSON_OBJECTAGG()
La funzione viene in genere utilizzata per produrre documenti JSON in base ai valori in una colonna del database.
Supponiamo di eseguire la seguente query:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Risultato:
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY __________ ________________________________ _____________ _____________ AD_PRES President 20000 40000 AD_VP Administration Vice President 15000 30000 SA_MAN Sales Manager 10000 20000
Ecco un esempio di come possiamo usare JSON_OBJECTAGG()
funzione per produrre un documento JSON da due delle colonne precedenti:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Risultato:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
In questo caso, il job_id
colonna è la chiave e il min_salary
colonna è il valore.
Consulta la documentazione di Oracle per una spiegazione più dettagliata di questa funzione.