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 cuandoexpr
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.