In Oracle Database das JSON_OBJECTAGG()
Funktion erstellt ein JSON-Objekt aus einem Schlüssel-Wert-Paar.
Typischerweise sind der Eigenschaftsschlüssel, der Eigenschaftswert oder beide Spalten von SQL-Ausdrücken.
Syntax
Die Syntax sieht so aus:
JSON_OBJECTAGG
( [ KEY ] string VALUE expr [ FORMAT JSON ]
[ JSON_on_null_clause ] [ JSON_agg_returning_clause ]
[ STRICT ] [ WITH UNIQUE KEYS ]
)
Wo:
[ KEY ] key_expr VALUE val_expr
gibt ein Eigenschafts-Schlüssel-Wert-Paar an.FORMAT JSON
gibt an, dass die Eingabezeichenfolge JSON ist und daher in der Ausgabe nicht in Anführungszeichen gesetzt wird.JSON_on_null_clause
gibt das zu verwendende Verhalten an, wennexpr
entspricht null (d. h. entweder Nullwerte in die Ausgabe aufnehmen oder nicht).JSON_returning_clause
gibt den Typ des Rückgabewerts an.STRICT
prüft, ob die Ausgabe der JSON-Generierungsfunktion korrektes JSON ist oder nicht. Schlägt die Prüfung fehl, wird ein Syntaxfehler ausgegeben.WITH UNIQUE KEYS
garantiert, dass generierte JSON-Objekte eindeutige Schlüssel haben.
Beispiel
Hier ist ein Beispiel, um zu demonstrieren, wie es funktioniert:
SELECT JSON_OBJECTAGG(KEY 'score' VALUE 37) FROM DUAL;
Ergebnis:
{"score":37}
Der KEY
part ist optional, daher führt Folgendes zum gleichen Ergebnis:
SELECT JSON_OBJECTAGG('score' VALUE 37) FROM DUAL;
Ergebnis:
{"score":37}
Verschachteltes JSON
Wenn einer der übergebenen Werte JSON enthält, können Sie FORMAT JSON
verwenden -Argument, um anzugeben, dass es JSON enthält und in der Ausgabe nicht in Anführungszeichen gesetzt werden soll.
Beispiel:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
FORMAT JSON
)
FROM DUAL;
Ergebnis:
{"details":{"name": "Peter", "score": 64}}
Folgendes passiert, wenn wir FORMAT JSON
entfernen Teil:
SELECT JSON_OBJECTAGG(
KEY 'details'
VALUE '{"name": "Peter", "score": 64}'
)
FROM DUAL;
Ergebnis:
{"details":"{\"name\": \"Peter\", \"score\": 64}"}
Datenbankbeispiel
Der JSON_OBJECTAGG()
Die Funktion wird normalerweise verwendet, um JSON-Dokumente basierend auf den Werten in einer Datenbankspalte zu erstellen.
Angenommen, wir führen die folgende Abfrage aus:
SELECT *
FROM jobs
WHERE min_salary > 9000;
Ergebnis:
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 ist ein Beispiel dafür, wie wir JSON_OBJECTAGG()
verwenden können Funktion zum Erstellen eines JSON-Dokuments aus zwei der obigen Spalten:
SELECT JSON_OBJECTAGG(KEY job_id VALUE min_salary)
FROM jobs
WHERE min_salary > 9000;
Ergebnis:
{"AD_PRES":20000,"AD_VP":15000,"SA_MAN":10000}
In diesem Fall die job_id
Spalte ist der Schlüssel und das min_salary
Spalte ist der Wert.
Eine ausführlichere Erklärung dieser Funktion finden Sie in der Oracle-Dokumentation.