I Oracle Database er JSON_OBJECTAGG()
funktion opretter et JSON-objekt fra et nøgleværdi-par.
Typisk er egenskabsnøglen, egenskabsværdien eller begge kolonner med SQL-udtryk.
Syntaks
Syntaksen ser sådan ud:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Hvor:
[ KEY ] key_expr VALUE val_expr
angiver et egenskabsnøgle-værdi-par.FORMAT JSON
angiver, at inputstrengen er JSON, og vil derfor ikke blive citeret i outputtet.JSON_on_null_clause
angiver den adfærd, der skal bruges, nårexpr
svarer til null (dvs. inkludere enten null-værdier i output eller ikke).JSON_returning_clause
angiver typen af returværdi.STRICT
kontrollerer, om outputtet fra JSON-genereringsfunktionen er korrekt JSON. Hvis kontrollen mislykkes, opstår der en syntaksfejl.WITH UNIQUE KEYS
garanterer, at genererede JSON-objekter har unikke nøgler.
Eksempel
Her er et eksempel for at demonstrere, hvordan det virker:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Resultat:
{"score":37}
KEY
del er valgfri, så følgende opnår samme resultat:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Resultat:
{"score":37}
Indlejret JSON
Hvis en af de værdier, du sender, indeholder JSON, kan du bruge FORMAT JSON
argument for at angive, at det indeholder JSON og ikke bør citeres i outputtet.
Eksempel:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Resultat:
{"details":{"name": "Peter", "score": 64}}
Her er, hvad der sker, hvis vi fjerner FORMAT JSON
del:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Resultat:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Databaseeksempel
JSON_OBJECTAGG()
funktion bruges typisk til at producere JSON-dokumenter baseret på værdierne i en databasekolonne.
Antag, at vi kører følgende forespørgsel:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Resultat:
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
Her er et eksempel på, hvordan vi kan bruge JSON_OBJECTAGG()
funktion til at producere et JSON-dokument fra to af ovenstående kolonner:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Resultat:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
I dette tilfælde er job_id
kolonnen er nøglen, og min_salary
kolonne er værdien.
Se Oracles dokumentation for en mere detaljeret forklaring af denne funktion.