In Oracle Database, de JSON_OBJECTAGG()
functie maakt een JSON-object van een sleutel-waardepaar.
Gewoonlijk zijn de eigenschapssleutel, de eigenschapswaarde of beide kolommen met SQL-expressies.
Syntaxis
De syntaxis gaat als volgt:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Waar:
[ KEY ] key_expr VALUE val_expr
specificeert een sleutel/waarde-paar van een eigenschap.FORMAT JSON
geeft aan dat de invoerreeks JSON is en daarom niet in de uitvoer wordt geciteerd.JSON_on_null_clause
specificeert het gedrag dat moet worden gebruikt wanneerexpr
is gelijk aan null (d.w.z. neem null-waarden op in de uitvoer of niet).JSON_returning_clause
specificeert het type retourwaarde.STRICT
controleert of de uitvoer van de JSON-generatiefunctie de juiste JSON is. Als de controle mislukt, wordt er een syntaxisfout gegenereerd.WITH UNIQUE KEYS
garandeert dat gegenereerde JSON-objecten unieke sleutels hebben.
Voorbeeld
Hier is een voorbeeld om te laten zien hoe het werkt:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Resultaat:
{"score":37}
De KEY
deel is optioneel, dus met het volgende wordt hetzelfde resultaat bereikt:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Resultaat:
{"score":37}
Geneste JSON
Als een van de waarden die u doorgeeft JSON bevat, kunt u de FORMAT JSON
. gebruiken argument om aan te geven dat het JSON bevat en niet in de uitvoer mag worden aangehaald.
Voorbeeld:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Resultaat:
{"details":{"name": "Peter", "score": 64}}
Dit gebeurt er als we de FORMAT JSON
verwijderen deel:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Resultaat:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Databasevoorbeeld
De JSON_OBJECTAGG()
functie wordt meestal gebruikt om JSON-documenten te produceren op basis van de waarden in een databasekolom.
Stel dat we de volgende query uitvoeren:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Resultaat:
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
Hier is een voorbeeld van hoe we de JSON_OBJECTAGG()
. kunnen gebruiken functie om een JSON-document te maken uit twee van de bovenstaande kolommen:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Resultaat:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
In dit geval is de job_id
kolom is de sleutel, en de min_salary
kolom is de waarde.
Zie de documentatie van Oracle voor een meer gedetailleerde uitleg van deze functie.