Desde la versión 10.2, puedes usar JSON en MariaDB como tipo de dato para almacenar y procesar datos flexibles y se­mie­s­tru­c­tu­ra­dos en tablas re­la­cio­na­les. Te mostramos las funciones y pasos más im­po­r­ta­n­tes.

Vista general de las funciones JSON en MariaDB

MariaDB te ofrece una serie de funciones útiles con las que puedes trabajar de forma eficaz con datos JSON di­re­c­ta­me­n­te en la base de datos. No necesitas una base de datos NoSQL adicional. Con las si­guie­n­tes he­rra­mie­n­tas puedes acceder de forma precisa a la in­fo­r­ma­ción, modificar co­n­te­ni­dos o verificar datos es­tru­c­tu­ra­dos:

  • JSON_VALUE(json_doc, json_path): esta función te permite leer un valor es­pe­cí­fi­co dentro de un campo JSON. Indicas el documento JSON y la ruta al elemento deseado. MariaDB te devuelve exac­ta­me­n­te ese valor, aho­rrá­n­do­te la tarea de analizar o parsear el documento completo ex­te­r­na­me­n­te.
  • JSON_SET(json_doc, path, value): con esta función puedes modificar una entrada existente o añadir un nuevo campo di­re­c­ta­me­n­te en la base de datos. Si la ruta indicada existe, MariaDB reemplaza el valor; si no existe, MariaDB crea la ruta.
  • JSON_REMOVE(json_doc, path): esta función te ayuda a limpiar un documento JSON. Por ejemplo, si quieres eliminar un atributo obsoleto, solo tienes que indicar la ruta.
  • JSON_CONTAINS(json_doc, value, path): esta función es útil para co­m­pro­ba­cio­nes o consultas con filtros. Puedes verificar si un valor de­te­r­mi­na­do está presente en el JSON.
  • JSON_VALID(json_doc): antes de procesar JSON, deberías ase­gu­rar­te de que es válido. Con JSON_VALID, MariaDB detecta si el texto JSON está co­rre­c­ta­me­n­te formado, lo que te permite ide­n­ti­fi­car errores de forma temprana.

Guía paso a paso: usar JSON en MariaDB

En esta sección te mostramos cómo almacenar, consultar y manipular datos JSON en MariaDB.

Paso 1: crea una tabla con un campo JSON

Primero, crea una tabla con una columna del tipo LONGTEXT o JSON. MariaDB almacena JSON in­te­r­na­me­n­te como texto, pero al usar las funciones JSON verifica au­to­má­ti­ca­me­n­te la sintaxis.

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    properties JSON
);
sql

En la columna properties puedes almacenar cualquier objeto JSON.

Paso 2: inserta datos JSON

Ahora puedes insertar registros con JSON válido usando MariaDB INSERT INTO:

INSERT INTO products (name, properties) VALUES (
    'desk',
    '{"color": "brown", "material": "timber", "weight": 12.5}'
);
sql

Es im­po­r­ta­n­te formatear co­rre­c­ta­me­n­te la cadena JSON y colocarla entre comillas. Dentro de la cadena, las comillas dobles deben escaparse con una barra invertida (\").

Paso 3: lee datos desde una columna JSON

Para extraer valores es­pe­cí­fi­cos de un objeto JSON, usa JSON_VALUE():

SELECT name, JSON_VALUE(properties, '$.material') AS material
FROM products;
sql

El resultado muestra el nombre del producto y el material al­ma­ce­na­do en el campo JSON.

Nota

JSON_VALUE() está di­s­po­ni­ble en MariaDB a partir de la versión 10.6.1. En versiones an­te­rio­res, se debe usar JSON_UNQUOTE(JSON_EXTRACT(...)) en su lugar.

Paso 4: actualiza datos JSON en MariaDB

Para modificar un valor dentro de un objeto JSON en MariaDB, utiliza JSON_SET():

UPDATE products
SET properties = JSON_SET(properties, '$.color', 'white')
WHERE name = 'desk';
sql

También puedes añadir nuevos pares clave-valor que no existían pre­via­me­n­te.

Paso 5: elimina un elemento de un JSON

Con JSON_REMOVE() puedes eliminar valores es­pe­cí­fi­cos de un objeto:

UPDATE products
SET properties = JSON_REMOVE(properties, '$.weight')
WHERE name = 'desk';
sql

Paso 6: busca valores en un JSON

En MariaDB puedes filtrar registros según co­n­te­ni­dos es­pe­cí­fi­cos dentro del JSON:

SELECT * FROM products
WHERE JSON_VALUE(properties, '$.material') = 'timber';
sql

Esto es es­pe­cia­l­me­n­te útil para filtros complejos, como búsquedas de productos o co­n­te­ni­dos pe­r­so­na­li­za­dos.

Paso 7: va­li­da­ción y de­pu­ra­ción

Si quieres comprobar si una columna contiene un JSON válido, puedes usar JSON_VALID():

SELECT name, JSON_VALID(properties) FROM products;
sql

Si la función devuelve 1, el JSON es válido; si devuelve 0, hay errores de sintaxis.

Paso 8: combina columnas JSON con columnas generadas e índices

MariaDB almacena in­te­r­na­me­n­te los co­n­te­ni­dos JSON como texto. Por ello, los datos deben ser ana­li­za­dos cada vez que se consultan. Esto puede causar problemas de re­n­di­mie­n­to, es­pe­cia­l­me­n­te en tablas grandes o cuando se accede con fre­cue­n­cia a de­te­r­mi­na­dos campos JSON. Una solución eficaz son las columnas generadas, que extraen au­to­má­ti­ca­me­n­te ciertos valores del contenido JSON y los almacenan por separado.

Por ejemplo, puedes extraer el valor de la clave material desde la columna JSON properties y guardarlo en una nueva columna indexable:

ALTER TABLE products
ADD COLUMN material VARCHAR(100) AS (JSON_VALUE(properties, '$.material')) STORED,
ADD INDEX idx_material (material);
sql

Este comando crea la columna material, que toma el valor JSON de $.material. La palabra clave STORED garantiza que el valor se almacene en la base de datos y no se calcule solo en tiempo de ejecución. Además, se crea un índice (idx_material) para realizar consultas precisas de forma eficiente.

Después, puedes ejecutar consultas mucho más rápidas como esta:

SELECT name FROM products WHERE material = 'timber';
sql

Esta técnica es es­pe­cia­l­me­n­te re­co­me­n­da­ble en entornos de pro­du­c­ción con muchas ope­ra­cio­nes de lectura. Además, reduce la carga de pro­ce­sa­mie­n­to en las consultas y garantiza tiempos de respuesta más cortos, incluso con grandes volúmenes de datos.

¿Por qué es útil la co­m­bi­na­ción de JSON y MariaDB?

El uso de JSON en MariaDB es es­pe­cia­l­me­n­te práctico cuando las apli­ca­cio­nes necesitan almacenar datos con una es­tru­c­tu­ra variable. Esto puede incluir co­n­fi­gu­ra­cio­nes, re­s­pue­s­tas de API, perfiles de usuario o registros (logs). JSON mantiene co­n­te­ni­dos anidados y flexibles en una columna. No necesitas crear columnas adi­cio­na­les para cada campo posible. En su lugar, añades nuevos valores en la es­tru­c­tu­ra JSON. De este modo, adaptas tus datos sin cambiar el esquema de la base de datos.

Es­pe­cia­l­me­n­te en sistemas que requieren tanto es­tru­c­tu­ras tabulares fijas como al­ma­ce­na­mie­n­to flexible de datos, JSON en MariaDB ofrece una solución rápida y sencilla. Puedes manejar co­n­te­ni­dos dinámicos sin renunciar a las ventajas de las consultas SQL tra­di­cio­na­les. Así, combinas la es­ta­bi­li­dad de los datos re­la­cio­na­les con la ada­p­ta­bi­li­dad de NoSQL.

Ir al menú principal