/

/

MySQL JSON_EXTRACT: Guía Completa para Extraer Datos JSON

Content

MySQL JSON_EXTRACT: Guía Completa para Extraer Datos JSON

MySQL JSON_EXTRACT: Guía Completa para Extraer Datos JSON

Introducción

Con el auge de las APIs y aplicaciones modernas, almacenar datos en formato JSON dentro de MySQL se ha vuelto muy común. La función JSON_EXTRACT es tu herramienta principal para acceder a estos datos.

¿Qué es JSON_EXTRACT?

JSON_EXTRACT es una función de MySQL que permite extraer valores específicos de columnas que contienen datos JSON.

Sintaxis Básica

JSON_EXTRACT(columna_json, '$.ruta.al.valor')

Ejemplos Prácticos

Estructura de Datos de Ejemplo

Imagina una tabla usuarios con una columna perfil tipo JSON:

{
  "nombre": "María García",
  "edad": 28,
  "direccion": {
  "ciudad": "Madrid",
  "pais": "España"
  },
  "intereses": ["tecnología", "música", "viajes"]
 }

Ejemplo 1: Extraer Valor Simple

SELECT JSON_EXTRACT(perfil, '$.nombre') AS nombre
 FROM usuarios;

Resultado: "María García"

Ejemplo 2: Extraer Valor Anidado

SELECT JSON_EXTRACT(perfil, '$.direccion.ciudad') AS ciudad
 FROM usuarios;

Resultado: "Madrid"

Ejemplo 3: Acceder a Arrays

-- Primer elemento del array
 SELECT JSON_EXTRACT(perfil, '$.intereses[0]') AS primer_interes
 FROM usuarios;

Resultado: "tecnología"

Ejemplo 4: Operador Shorthand ->

MySQL ofrece una sintaxis más corta:

SELECT perfil->'$.nombre' AS nombre
 FROM usuarios;

Ejemplo 5: Quitar Comillas con ->>

SELECT perfil->>'$.nombre' AS nombre
 FROM usuarios;

Resultado: María García (sin comillas)

Filtrar por Valores JSON

WHERE con JSON_EXTRACT

SELECT *
 FROM usuarios
 WHERE JSON_EXTRACT(perfil, '$.direccion.pais') = '"España"';

Usando el Operador ->>

SELECT *
 FROM usuarios
 WHERE perfil->>'$.direccion.pais' = 'España';

Funciones JSON Relacionadas

| Función | Descripción | Ejemplo |

|---------|-------------|---------|

| JSON_EXTRACT | Extrae valores | JSON_EXTRACT(col, '$.key') | | JSON_UNQUOTE | Quita comillas | JSON_UNQUOTE(JSON_EXTRACT(...)) | | JSON_CONTAINS | Verifica si contiene valor | JSON_CONTAINS(col, '"valor"', '$.array') | | JSON_KEYS | Lista las claves | JSON_KEYS(col) | | JSON_LENGTH | Cuenta elementos | JSON_LENGTH(col, '$.array') |


Casos de Uso Avanzados

Buscar en Arrays

SELECT *
 FROM usuarios
 WHERE JSON_CONTAINS(perfil, '"música"', '$.intereses');

Extraer Múltiples Valores

SELECT
  perfil->>'$.nombre' AS nombre,
  perfil->>'$.direccion.ciudad' AS ciudad,
  JSON_LENGTH(perfil, '$.intereses') AS num_intereses
 FROM usuarios;

Actualizar Valores JSON

UPDATE usuarios
 SET perfil = JSON_SET(perfil, '$.edad', 29)
 WHERE id = 1;

Optimización y Performance

Índices en Columnas JSON

-- Crear columna virtual
 ALTER TABLE usuarios
 ADD COLUMN ciudad VARCHAR(100)
 GENERATED ALWAYS AS (perfil->>'$.direccion.ciudad');


Mejores Prácticas

1. Usa índices virtuales para campos JSON que consultas frecuentemente 2. Evita JSON_EXTRACT en WHERE sin índices en tablas grandes 3. Considera normalizar datos que consultas muy seguido

Errores Comunes

Error 1: Ruta Incorrecta

-- Incorrecto
 JSON_EXTRACT(perfil, 'nombre')


Error 2: Comparación con Comillas

-- Incorrecto (no encuentra resultados)
 WHERE JSON_EXTRACT(perfil, '$.ciudad') = 'Madrid'


Conclusión

JSON_EXTRACT es fundamental para trabajar con datos JSON en MySQL. Dominar esta función te permite aprovechar la flexibilidad del JSON mientras mantienes el poder de las consultas SQL.

---

Tip Pro: Usa herramientas de IA como AI2sql para generar consultas JSON_EXTRACT complejas automáticamente.

Share this

More Articles