Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função JSON_OBJECT() no Oracle


No Oracle Database, o JSON_OBJECT() A função cria um objeto JSON de uma sequência de pares chave-valor ou uma instância de tipo de objeto.

Sintaxe


A sintaxe fica assim:
JSON_OBJECT
  ( [ [ KEY ] key_expr VALUE val_expr [ FORMAT JSON ]
     ,]...
    [ JSON_on_null_clause ] [ JSON_returning_clause ]
    [ STRICT ] 
    [ WITH UNIQUE KEYS ]  )

Onde:
  • [ KEY ] key_expr VALUE val_expr especifica um par de valores-chave de propriedade.
  • FORMAT JSON indica que a string de entrada é JSON e, portanto, não será citada na saída.
  • JSON_on_null_clause especifica o comportamento a ser usado quando expr equivale a nulo (ou seja, inclua valores nulos na saída ou não).
  • JSON_returning_clause especifica o tipo de valor de retorno.
  • STRICT verifica se a saída da função de geração JSON é o JSON correto. Se a verificação falhar, um erro de sintaxe será gerado.
  • WITH UNIQUE KEYS garante que os objetos JSON gerados tenham chaves exclusivas.

Exemplo


Veja um exemplo para demonstrar como funciona:
SELECT JSON_OBJECT(KEY 'score' VALUE 37) FROM DUAL;

Resultado:
{"score":37}

A KEY parte é opcional, então o seguinte obtém o mesmo resultado:
SELECT JSON_OBJECT('score' VALUE 37) FROM DUAL;

Resultado:
{"score":37}

Vários pares de chave/valor


Aqui está um exemplo com vários pares de chave/valor:
SELECT JSON_OBJECT(
    KEY 'fname' VALUE 'Homer',
    KEY 'lname' VALUE 'Escobar',
    KEY 'score' VALUE 237
    ) 
FROM DUAL;

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

JSON aninhado


Se um dos valores passados ​​contiver JSON, você poderá usar o FORMAT JSON argumento para especificar que ele contém JSON e não deve ser citado na saída.

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

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

Veja o que acontece se removermos o FORMAT JSON papel:
SELECT JSON_OBJECT(
    KEY 'details' 
    VALUE '{"name": "Peter", "score": 64}'
    ) 
FROM DUAL;

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

Exemplo de banco de dados


Suponha que executemos a seguinte consulta:
SELECT *
FROM regions;

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

Aqui está a mesma consulta, mas com as colunas selecionadas passadas para o JSON_OBJECT() função:
SELECT JSON_OBJECT(*) 
FROM regions;

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

E aqui está com apenas uma coluna passada para a função:
SELECT JSON_OBJECT(region_name) 
FROM regions;

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

Consulte a documentação da Oracle para obter uma explicação mais detalhada desta função.