sql >> Database teknologi >  >> RDS >> Oracle

JSON_OBJECT() Funktion i Oracle

I Oracle Database er JSON_OBJECT() funktion opretter et JSON-objekt ud fra en sekvens af nøgleværdi-par eller en objekttypeinstans.

Syntaks

Syntaksen ser sådan ud:

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

Resultat:

{"score":37}

KEY del er valgfri, så følgende opnår samme resultat:

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

Resultat:

{"score":37}

Flere nøgle-/værdipar

Her er et eksempel med flere nøgle/værdi-par:

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

Resultat:

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

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

Resultat:

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

Databaseeksempel

Antag, at vi kører følgende forespørgsel:

SELECT *
FROM regions;

Resultat:

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

Her er den samme forespørgsel, men med de valgte kolonner videregivet til 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"}

Og her er det med kun én kolonne videregivet til 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 for en mere detaljeret forklaring af denne funktion.


  1. Hvorfor er Oracle så langsom, når jeg sender en java.sql.Timestamp for en DATE-kolonne?

  2. En oversigt over de forskellige scanningsmetoder i PostgreSQL

  3. 1064 fejl i CREATE TABLE ... TYPE=MYISAM

  4. få adgang til et kolonnealias i where-sætningen i postgresql