I Oracle Database, JSON_OBJECTAGG()
funktionen skapar ett JSON-objekt från ett nyckel-värdepar.
Vanligtvis är egenskapsnyckeln, egenskapsvärdet eller båda kolumner med SQL-uttryck.
Syntax
Syntaxen ser ut så här:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Var:
[ KEY ] key_expr VALUE val_expr
anger ett egenskapsnyckel-värdepar.FORMAT JSON
indikerar att indatasträngen är JSON och kommer därför inte att citeras i utdata.JSON_on_null_clause
anger beteendet som ska användas närexpr
är lika med null (dvs. inkluderar antingen nollvärden i utdata eller inte).JSON_returning_clause
anger typen av returvärde.STRICT
kontrollerar om utdata från JSON-genereringsfunktionen är korrekt JSON. Om kontrollen misslyckas uppstår ett syntaxfel.WITH UNIQUE KEYS
garanterar att genererade JSON-objekt har unika nycklar.
Exempel
Här är ett exempel för att visa hur det fungerar:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Resultat:
{"score":37}
KEY
del är valfri, så följande ger samma resultat:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Resultat:
{"score":37}
Inkapslade JSON
Om ett av värdena du skickar innehåller JSON kan du använda FORMAT JSON
argument för att ange att den innehåller JSON och inte bör citeras i utdata.
Exempel:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Resultat:
{"details":{"name": "Peter", "score": 64}}
Här är vad som händer om vi tar bort FORMAT JSON
del:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Resultat:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Databasexempel
JSON_OBJECTAGG()
funktion används vanligtvis för att producera JSON-dokument baserat på värdena i en databaskolumn.
Anta att vi kör följande fråga:
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
Här är ett exempel på hur vi kan använda JSON_OBJECTAGG()
funktion för att skapa ett JSON-dokument från två av ovanstående kolumner:
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 det här fallet, job_id
kolumnen är nyckeln och min_salary
kolumn är värdet.
Se Oracles dokumentation för en mer detaljerad förklaring av denna funktion.