Oracle
 sql >> Datenbank >  >> RDS >> Oracle

JSON_OBJECT()-Funktion in Oracle

In der Oracle-Datenbank das JSON_OBJECT() Funktion erstellt ein JSON-Objekt aus einer Folge von Schlüssel-Wert-Paaren oder einer Objekttypinstanz.

Syntax

Die Syntax lautet wie folgt:

JSON_OBJECT
  ( [ [ KEY ] key_expr VALUE val_expr [ FORMAT JSON ]
     ,]...
    [ JSON_on_null_clause ] [ JSON_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, wenn expr 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_OBJECT(KEY 'score' VALUE 37) FROM DUAL;

Ergebnis:

{"score":37}

Der KEY part ist optional, daher führt Folgendes zum gleichen Ergebnis:

SELECT JSON_OBJECT('score' VALUE 37) FROM DUAL;

Ergebnis:

{"score":37}

Mehrere Schlüssel/Wert-Paare

Hier ist ein Beispiel mit mehreren Schlüssel/Wert-Paaren:

SELECT JSON_OBJECT(
    KEY 'fname' VALUE 'Homer',
    KEY 'lname' VALUE 'Escobar',
    KEY 'score' VALUE 237
    ) 
FROM DUAL;

Ergebnis:

{"fname":"Homer","lname":"Escobar","score":237}

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_OBJECT(
    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_OBJECT(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}'
    ) 
FROM DUAL;

Ergebnis:

{"details":"{\"name\": \"Peter\", \"score\": 64}"} 

Datenbankbeispiel

Angenommen, wir führen die folgende Abfrage aus:

SELECT *
FROM regions;

Ergebnis:

   REGION_ID               REGION_NAME 
____________ _________________________ 
           1 Europe                    
           2 Americas                  
           3 Asia                      
           4 Middle East and Africa    

Hier ist die gleiche Abfrage, aber mit den ausgewählten Spalten, die an JSON_OBJECT() übergeben werden Funktion:

SELECT JSON_OBJECT(*) 
FROM regions;

Ergebnis:

{"REGION_ID":1,"REGION_NAME":"Europe"}                    
{"REGION_ID":2,"REGION_NAME":"Americas"}                  
{"REGION_ID":3,"REGION_NAME":"Asia"}                      
{"REGION_ID":4,"REGION_NAME":"Middle East and Africa"}

Und hier ist es mit nur einer Spalte, die an die Funktion übergeben wird:

SELECT JSON_OBJECT(region_name) 
FROM regions;

Ergebnis:

{"region_name":"Europe"}                    
{"region_name":"Americas"}                  
{"region_name":"Asia"}                      
{"region_name":"Middle East and Africa"} 

Eine ausführlichere Erklärung dieser Funktion finden Sie in der Dokumentation von Oracle.