# Cómo usar JSON en MariaDB

Desde la versión 10.2, puedes usar JSON en MariaDB como tipo de dato para almacenar y procesar datos flexibles y semiestructurados en tablas relacionales. Te mostramos las funciones y pasos más importantes.

## Vista general de las funciones JSON en MariaDB

[MariaDB](https://www.ionos.es/digitalguide/servidores/know-how/que-es-mariadb/) te ofrece una serie de funciones útiles con las que puedes trabajar de forma eficaz con **datos JSON** directamente en la base de datos. No necesitas una base de datos NoSQL adicional. Con las siguientes herramientas puedes acceder de forma precisa a la información, modificar contenidos o verificar [datos estructurados](https://www.ionos.es/digitalguide/paginas-web/creacion-de-paginas-web/los-datos-estructurados-en-la-web-semantica/):

- **`JSON_VALUE(json_doc, json_path)`:** esta función te permite leer un valor específico dentro de un campo JSON. Indicas el documento JSON y la ruta al elemento deseado. MariaDB te devuelve exactamente ese valor, ahorrándote la tarea de analizar o parsear el documento completo externamente.
- **`JSON_SET(json_doc, path, value)`:** con esta función puedes modificar una entrada existente o añadir un nuevo campo directamente 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 comprobaciones o consultas con filtros. Puedes verificar si un valor determinado está presente en el JSON.
- **`JSON_VALID(json_doc)`:** antes de procesar JSON, deberías asegurarte de que es válido. Con `JSON_VALID`, MariaDB detecta si el texto JSON está correctamente formado, lo que te permite identificar 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 internamente como texto, pero al usar las **funciones JSON** verifica automáticamente la sintaxis.

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

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](https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/mariadb-insert-into/):

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

Es importante formatear correctamente 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 específicos de un objeto JSON, usa `JSON_VALUE()`:

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

El resultado muestra el nombre del producto y el material almacenado en el campo JSON.

Nota `JSON_VALUE()` está disponible en MariaDB a partir de la versión 10.6.1. En versiones anteriores, 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()`:

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

También puedes añadir nuevos pares clave-valor que no existían previamente.

### Paso 5: elimina un elemento de un JSON

Con `JSON_REMOVE()` puedes eliminar valores específicos de un objeto:

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

### Paso 6: busca valores en un JSON

En MariaDB puedes filtrar registros según contenidos específicos dentro del JSON:

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

Esto es especialmente útil para filtros complejos, como búsquedas de productos o contenidos personalizados.

### Paso 7: validación y depuración

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

```sql
SELECT name, JSON_VALID(properties) FROM products;
```

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 internamente los contenidos JSON como texto. Por ello, los datos deben ser analizados cada vez que se consultan. Esto puede causar problemas de rendimiento, especialmente en tablas grandes o cuando se accede con frecuencia a determinados campos JSON. Una solución eficaz son las **columnas generadas**, que extraen automáticamente 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:

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

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:

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

Esta técnica es especialmente recomendable en entornos de producción con muchas operaciones de lectura. Además, reduce la carga de procesamiento en las consultas y garantiza tiempos de respuesta más cortos, incluso con grandes volúmenes de datos.

## ¿Por qué es útil la combinación de JSON y MariaDB?

El uso de [JSON](https://www.ionos.es/digitalguide/servidores/know-how/que-es-json/) en MariaDB es especialmente práctico cuando las aplicaciones necesitan almacenar datos con una **estructura variable**. Esto puede incluir configuraciones, respuestas de API, perfiles de usuario o registros (logs). JSON mantiene contenidos anidados y flexibles en una columna. No necesitas crear columnas adicionales para cada campo posible. En su lugar, añades nuevos valores en la estructura JSON. De este modo, adaptas tus datos sin cambiar el esquema de la base de datos.

Especialmente en sistemas que requieren tanto estructuras tabulares fijas como almacenamiento flexible de datos, JSON en MariaDB ofrece una solución rápida y sencilla. Puedes manejar contenidos dinámicos sin renunciar a las ventajas de las **consultas SQL** tradicionales. Así, combinas la estabilidad de los datos relacionales con la adaptabilidad de NoSQL.


This is a markdown version of: [https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/mariadb-json/](https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/mariadb-json/) for AI/LLM consumption.