Cada vez está más arraigado el uso de JSON en el mundo de la informática. JSON es un acrónimo que se traduce como “JavaScript Json Notation”, y podríamos decir que es la evolución alternativa al lenguaje XML.
Uno de los motivos por lo que está cada vez más extendido, es por la facilidad de intercambiar datos entre aplicaciones gracias a una estructura simple, ligera, de codificación simple y fácil lectura.
Además, JSON soporta tipos de datos como String, number, booleans, objetos, array o nulos, lo cual ofrece la posibilidad de almacenar información relacionada en un mismo objeto, como si se tratara de un documento.
El siguiente ejemplo ilustra cómo se visualizaría en JSON los datos de una persona con sus datos de contacto.
En cuanto a la estructura, siempre es la misma. Se compone de un identificativo entre comillas dobles seguido de dos puntos y, a continuación, podemos utilizar strings, numéricos, array y objetos. Mientras que los strings van entrecomillados, un array irá delimitado por corchetes y si se trata de un objeto, éste lleva llaves. Para separar estos elementos contenidos en un JSON se utiliza la coma.
Como se puede observar en el ejemplo, en contraste con la información almacenada en un modelo relacional, un documento JSON contiene todos los detalles de la persona, incluyendo arrays de información relacionada, en un mismo elemento. Una única fila de la tabla PERSONA en JSON incluye las relaciones con otras tablas como CIUDAD.
Por este motivo, disponer de una estructura de texto que proporcione una “ficha” con toda la información relacionada de un individuo, nos proporciona una versatilidad de integración con otros entornos, sin depender del modelo relacional de tablas. JSON fue introducido en la base de datos Oracle en la versión 12c Release 2 pero no fue hasta la 21c donde tendrá un tipo de dato propio. A la hora de trabajar con JSON en versiones anteriores a 12c, había que hacerlo con campos de tipo VARCHAR2, CLOB o BLOB.
En la versión Oracle23c, finalmente, Oracle ofrece una dualidad real entre modelos relacionales, documentales (JSON) y orientados a objetos de forma nativa y transparente. Además, ofrece Autonomous JSON Database disponible en OCI.
Para ilustrar esta dualidad entre los modelos relacional y documental de JSON, te propongo descargarte la máquina virtual de Oracle23c Developers Free Edition desde el sitio de Oracle Developer’s Day, en este enlace.
Lo primero que vamos a hacer es definir una tabla con una columna de tipo JSON
Si nos fijamos en la estructura de la tabla, tenemos incluido la cláusula VALIDATE junto con el tipo de dato JSON. Con esta cláusula vamos a definir la estructura de nuestro JSON que va a almacenarse en la tabla.
En caso de que nos olvidemos de la definición de nuestro JSON, podemos consultar la vista del diccionario USER_JSON_SCHEMA_COLUMNS:
Para introducir un registro nuevo en nuestra tabla se deberá seguir la siguiente estructura:
Si este nuevo registro no cumple con el formato esperado, nos arrojará un error avisando de que no es válido:
Otra manera para comprobar si el JSON es válido, es usar la API de Oracle DBMS_JSON_SCHEMA e invocar la función IS_SCHEMA_VALID. Esta función recibe como parámetro el JSON y devolverá 1 si es correcto o 0 si es inválido.
Esta función puede ser muy útil si queremos validar el JSON antes de realizar una transacción.
Podemos leer el JSON de manera simple o en modo tabla apoyándose en las funciones que nos brinda Oracle. Por ejemplo, de manera simple:
De forma más compleja, se puede leer por medio de la función JSON_TABLE. Con dicha función veríamos el JSON como si fuera una tabla:
Podemos utilizar la función JSON_DATAGUIDE para crear una vista relacional de la documentación guardada. El resultado puede ser devuelto en formato jerárquico dbms_json.format_hierarchical o en formato plano dbms_json.format_flat (valor por defecto).
Autonomous JSON Database
Oracle incorpora un nuevo tipo de Autonomous DB llamado “Autonomous JSON Database”. Este tipo de base de datos que se une a las ya existentes en Autonomous como son: ATP “Autonomous Transacction Process”, ADW “Autonomous Datawarhouse” o APEX, pero enfocado exclusivamente a almacenar documentación en formato JSON y a desarrolladores que quieran algo potente y a un coste asequible mediante la API NoSQL, que cuenta además con todas las características de MongoDB.
Otras funcionalidades muy interesantes de este tipo de servicio son:
- Computación y almacenamientos elásticos.
- Lecturas y escrituras con latencias de un solo dígito.
- Alta disponibilidad
- Bajo precio y gratuita
A continuación te proporciono los pasos para crear una base de datos autónoma desde tu propia cuenta de Oracle Cloud Infrastructure, y un ejemplo sencillo sobre cómo habilitar la API de MongoDB para integrar una base de datos MongoDB con nuestra Autonomous JSON Database.
Una vez que entremos en nuestra tenancy, iremos a la sección de Oracle Database, y seleccionamos la opción de Autonomous JSON Database.
En la siguiente ventana pulsaremos en Create Autonomous Database, y seleccionaremos el tipo JSON
Una vez definida con el nombre y el compartimento deseado, tendremos que configurar nuestra conexión para poder trabajar con este tipo de servicio:
Nos ponemos manos a la obra una vez que hemos configurado nuestra conexión para poder utilizar MongoDB. Para ello, en la base de datos que hemos definido en el punto anterior, debemos habilitar dicha opción mediante Tool Configuration:
Ahí habilitamos la opción MongoDB API. Cabe indicar que esta opción no es gratuita.
En este punto ya disponemos de la infraestructura necesaria para realizar el siguiente ejercicio en el cual vamos a: Definir una tabla para almacenar la información en formato JSON.
- Definir la clase en MongoDB para alimentar la tabla que hemos definido en el punto anterior.
- Visualizar la información que se ha introducido en el punto anterior.
El primer paso es definir la tabla T_EQUIPOS_FUTBOL con una única columna de tipo JSON:
Ahora desde MongoDB insertamos documentos en la tabla que hemos definido en el punto anterior:
Consultamos el documento que hemos insertado desde MongoDB:
¡Voilà!, hemos insertado documentación desde MongoDB a nuestra base de datos Autonomous JSON de manera muy fácil.