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_exprspecifica una coppia chiave-valore della proprietà.FORMAT JSONindica che la stringa di input è JSON e quindi non sarà tra virgolette nell'output.JSON_on_null_clausespecifica il comportamento da utilizzare quandoexprequivale a null (ovvero includere o meno valori null nell'output).JSON_returning_clausespecifica il tipo di valore restituito.STRICTcontrolla se l'output della funzione di generazione JSON è JSON corretto o meno. Se il controllo fallisce, viene generato un errore di sintassi.WITH UNIQUE KEYSgarantisce 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.