sql >> Databáze >  >> RDS >> Oracle

Funkce JSON_OBJECT() v Oracle

V databázi Oracle je to JSON_OBJECT() funkce vytvoří objekt JSON ze sekvence párů klíč-hodnota nebo jedné instance typu objektu.

Syntaxe

Syntaxe vypadá takto:

JSON_OBJECT
  ( [ [ KEY ] key_expr VALUE val_expr [ FORMAT JSON ]
     ,]...
    [ JSON_on_null_clause ] [ JSON_returning_clause ]
    [ STRICT ] 
    [ WITH UNIQUE KEYS ]  )

Kde:

  • [ KEY ] key_expr VALUE val_expr určuje pár klíč–hodnota vlastnosti.
  • FORMAT JSON označuje, že vstupní řetězec je JSON, a proto nebude na výstupu uveden v uvozovkách.
  • JSON_on_null_clause určuje chování, které se má použít, když expr rovná se null (tj. buď zahrnout hodnoty null do výstupu, nebo ne).
  • JSON_returning_clause určuje typ návratové hodnoty.
  • STRICT zkontroluje, zda výstup funkce generování JSON je správný JSON. Pokud kontrola selže, dojde k chybě syntaxe.
  • WITH UNIQUE KEYS zaručuje, že generované objekty JSON mají jedinečné klíče.

Příklad

Zde je příklad demonstrující, jak to funguje:

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

Výsledek:

{"score":37}

KEY část je volitelná, takže následující dosáhne stejného výsledku:

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

Výsledek:

{"score":37}

Více párů klíč/hodnota

Zde je příklad s několika páry klíč/hodnota:

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

Výsledek:

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

Vnořený JSON

Pokud jedna z předávaných hodnot obsahuje JSON, můžete použít FORMAT JSON argument k určení, že obsahuje JSON a neměl by být ve výstupu citován.

Příklad:

SELECT JSON_OBJECT(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}' 
    FORMAT JSON
    ) 
FROM DUAL;

Výsledek:

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

Co se stane, když odstraníme FORMAT JSON část:

SELECT JSON_OBJECT(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}'
    ) 
FROM DUAL;

Výsledek:

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

Příklad databáze

Předpokládejme, že spustíme následující dotaz:

SELECT *
FROM regions;

Výsledek:

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

Zde je stejný dotaz, ale s vybranými sloupci předanými do JSON_OBJECT() funkce:

SELECT JSON_OBJECT(*) 
FROM regions;

Výsledek:

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

A tady je to s jedním sloupcem předaným do funkce:

SELECT JSON_OBJECT(region_name) 
FROM regions;

Výsledek:

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

Podrobnější vysvětlení této funkce najdete v dokumentaci Oracle.


  1. Dotaz na prvky pole uvnitř typu JSON

  2. Riziko kolize UUID při použití různých algoritmů

  3. pgFincore 1.2, rozšíření PostgreSQL

  4. Rychlejší alternativa v Oracle k SELECT COUNT(*) FROM sometable