sql >> Base de Datos >  >> RDS >> Oracle

Función JSON_OBJECT() en Oracle

En Oracle Database, el JSON_OBJECT() La función crea un objeto JSON a partir de una secuencia de pares clave-valor o una instancia de tipo de objeto.

Sintaxis

La sintaxis es así:

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

donde:

  • [ KEY ] key_expr VALUE val_expr especifica un par clave-valor de propiedad.
  • FORMAT JSON indica que la cadena de entrada es JSON y, por lo tanto, no se citará en la salida.
  • JSON_on_null_clause especifica el comportamiento a usar cuando expr equivale a nulo (es decir, incluye valores nulos en la salida o no).
  • JSON_returning_clause especifica el tipo de valor de retorno.
  • STRICT comprueba si la salida de la función de generación de JSON es JSON correcta o no. Si la comprobación falla, se genera un error de sintaxis.
  • WITH UNIQUE KEYS garantiza que los objetos JSON generados tengan claves únicas.

Ejemplo

Aquí hay un ejemplo para demostrar cómo funciona:

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

Resultado:

{"score":37}

La KEY parte es opcional, por lo que lo siguiente logra el mismo resultado:

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

Resultado:

{"score":37}

Varios pares de clave/valor

Aquí hay un ejemplo con varios pares clave/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 anidado

Si uno de los valores que pasa contiene JSON, puede usar el FORMAT JSON argumento para especificar que contiene JSON y no debe citarse en la salida.

Ejemplo:

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

Resultado:

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

Esto es lo que sucede si eliminamos el FORMAT JSON parte:

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

Resultado:

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

Ejemplo de base de datos

Supongamos que ejecutamos la siguiente consulta:

SELECT *
FROM regions;

Resultado:

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

Aquí está la misma consulta, pero con las columnas seleccionadas pasadas a JSON_OBJECT() función:

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

Y aquí está con solo una columna pasada a la función:

SELECT JSON_OBJECT(region_name) 
FROM regions;

Resultado:

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

Consulte la documentación de Oracle para obtener una explicación más detallada de esta función.