sql >> Databasteknik >  >> RDS >> Oracle

JSON_OBJECT() Funktion i Oracle

I Oracle Database, JSON_OBJECT() funktionen skapar ett JSON-objekt från en sekvens av nyckel-värdepar eller en objekttypsinstans.

Syntax

Syntaxen ser ut så här:

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

Resultat:

{"score":37}

KEY del är valfri, så följande ger samma resultat:

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

Resultat:

{"score":37}

Flera nyckel-/värdepar

Här är ett exempel med flera nyckel/värdepar:

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

Resultat:

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

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

Resultat:

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

Databasexempel

Anta att vi kör följande fråga:

SELECT *
FROM regions;

Resultat:

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

Här är samma fråga, men med de valda kolumnerna skickade till JSON_OBJECT() funktion:

SELECT JSON_OBJECT(*) 
FROM regions;

Resultat:

{"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"}

Och här är den med bara en kolumn som skickas till funktionen:

SELECT JSON_OBJECT(region_name) 
FROM regions;

Resultat:

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

Se Oracles dokumentation för en mer detaljerad förklaring av denna funktion.


  1. Sammanfoga flera rader i en array med SQL på PostgreSQL

  2. SQLite skära

  3. Konvertera BufferedInputStream till bild

  4. SQLAlchemy:filtrering på värden lagrade i kapslad lista i JSONB-fältet