Consultas de mysql a JSON son posibles desde la versión 8 de MySQL y desde esta podemos guardar, modificar y eliminar datos en formato JSON. Para esto tenemos que tomar en cuenta mysql 8 cuenta el tipo de dato JSON el cual tenemos disponible en nuestra version de mysql.
como sabemos desde que iniciamos con mongodb y las base de datos NoSql hemos visto como estos datos son mas rapidos y flexibles de manipular que una base datos tracidional. Por lo cual mysql a implementado este tipo de datos.
Consultar un Json desde mysql
JSON_EXTRACT
es una función de MySQL que permite extraer un valor de un objeto JSON.
La sintaxis es la siguiente:
JSON_EXTRACT(json_expression, path)
Donde json_expression
es la expresión JSON que deseas evaluar y path
es una ruta que indica el camino para acceder al valor deseado dentro del objeto JSON.
Por ejemplo, si tienes una columna llamada data
que contiene un objeto JSON de la siguiente manera:
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
Puedes extraer el valor del campo name
con la siguiente consulta:
SELECT JSON_EXTRACT(data, "$.name") AS name FROM tabla;
Y esto te devolverá una columna llamada name
con el valor «John Doe».

Como actualizar un columna json desde mysql ?
Es cierto que ya sabemos consultar JSON de una columna , pero como hacemos para actualizar con la funcion JSON_REPLACE
MySQL permite reemplazar un valor en un objeto JSON .
La sintaxis es la siguiente:
JSON_REPLACE(json_expression, path, new_value)
Donde json_expression
es la expresión JSON que deseas evaluar, path
es una ruta que indica el camino para acceder al valor que deseas reemplazar dentro del objeto JSON, y new_value
es el nuevo valor que deseas insertar en el objeto JSON .
Por ejemplo, si tienes una columna llamada data
que contiene un objeto JSON de la siguiente manera:
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
Puedes reemplazar el valor del campo name
con la siguiente consulta:
UPDATE tabla SET data = JSON_REPLACE(data, "$.name", "Jane Doe");
Y esto cambiará el valor de la columna data
a:
{
"name": "Jane Doe",
"age": 30,
"email": "john.doe@example.com"
}

Eliminar un valor en un objeto JSON
Al igual que cualquier otra base de datos NOSql pedemos elimanar valores de un artchivo JSON . Para esto usamos la función JSON_REMOVE
de MySQL que permite eliminar un valor en un objeto JSON. La
Sintaxis es la siguiente:
JSON_REMOVE(json_expression, path)
Donde json_expression
es la expresión JSON que deseas evaluar, y path
es una ruta que indica el camino para acceder al valor que deseas eliminar dentro del objeto JSON.
Por ejemplo, si tienes una columna llamada data
que contiene un objeto JSON de la siguiente manera:
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
Puedes eliminar el valor del campo email
con la siguiente consulta:
UPDATE tabla SET data = JSON_REMOVE(data, "$.email");
Y esto cambiará el valor de la columna data
a:
{
"name": "John Doe",
"age": 30
}

Como importar archivo JSON a Mysql ?
A diferencia de PostgreSQL con el comando \copy o de Sql Server con el openrowset en MySQL no cuenta con una funcion nativa para importar archivos json por lo cual debemos recurrir a PHP o PHYTON para los fines de importar y guardar un archivo JSON en mysql.
Aqui te dejo un ejemplo de como funcionaria en PHYTON
Puedes leer un archivo JSON en Python y convertirlo en un objeto utilizable con la función json.load
. Aquí hay un ejemplo:
import json
# Leer el contenido del archivo JSON
with open("archivo.json", "r") as f:
obj = json.load(f)
# Acceder a los valores del objeto
print(obj["campo1"])
print(obj["campo2"])
# O si es una lista de objetos
for item in obj:
print(item["campo1"])
print(item["campo2"])
Una vez que tienes el objeto en formato PHYTON, puedes manipularlo y acceder a los valores de la misma manera que con cualquier otro objeto en PHYTON. Luego, puedes insertar los datos en una tabla de MySQL utilizando la librería mysql.connector
o pymysql
.
Aquí hay un ejemplo utilizando pymysql
:
import pymysql
# Conectarse a la base de datos
conn = pymysql.connect(host="host", user="username", password="password", database="database")
# Crear un cursor
cursor = conn.cursor()
# Insertar los datos en la tabla
for item in obj:
cursor.execute("INSERT INTO tabla (campo1, campo2) VALUES (%s, %s)", (item["campo1"], item["campo2"]))
# Guardar los cambios
conn.commit()
# Cerrar la conexión
conn.close()
Como guardar un json en una columna de mysql
Al igual que extraer de un archivo es posible que lo que estes recibiendo de una API sea un JSON para que puedas guardarlo. para este caso te muestro como guadar un json en la tabla de tu base de datos. Aunque aqui se utiliza un INSERT sql podemos crear un procedimiento de mysql para que pueda recibir esta información.
Para guardar un objeto JSON en una columna de una tabla en MySQL, debes especificar el tipo de datos JSON
para la columna.
Por ejemplo, puedes crear una tabla personas
con una columna data
que almacene objetos JSON de la siguiente manera:
CREATE TABLE
personas ( id INT AUTO_INCREMENT PRIMARY KEY, data JSON );
Después puedes insertar objetos JSON en la columna data
de la siguiente manera:
INSERT INTO
personas (data) VALUES ('{ "name": "John Doe", "age": 30, "email": "john.doe@example.com" }');
Puedes consultar los datos almacenados en la tabla personas
con una consulta como la siguiente:
SELECT * FROM personas;
Y obtendrás un resultado similar a:
+----+----------------------------------------+
| id | data |
+----+-------------------------------------------------------------------+
| 1 | {"name": "John Doe", "age": 30, "email": "john.doe@example.com"} |
+----+--------------------------------------------------------------------+
Como Filtrar un Json desde mysql ?
Puedes utilizar la función JSON_EXTRACT
en una cláusula WHERE
de una consulta de MySQL para filtrar registros basados en el contenido de una columna que almacena objetos JSON.
Por ejemplo, supongamos que tienes una tabla personas
con una columna data
que almacena objetos JSON como el siguiente:
+----+----------------------------------------+
| id | data |
+----+----------------------------------------+
| 1 | {"name": "John Doe", "age": 30, "email": "john.doe@example.com"} |
| 2 | {"name": "Jane Doe", "age": 25, "email": "jane.doe@example.com"} |
+----+----------------------------------------+
Puedes consultar todas las personas con una edad de 30 años o más con la siguiente consulta:
SELECT * FROM personas WHERE JSON_EXTRACT(data, "$.age") >= 30;
Y obtendrás un resultado similar a:
+----+----------------------------------------+
| id | data |
+----+----------------------------------------
---------------------------+
| 1 | {"name": "John Doe", "age": 30, "email": "john.doe@example.com"} |
+----+-----------------------------------------------
--------------------+
En este ejemplo, la función JSON_EXTRACT
extrae el valor del campo age
del objeto JSON almacenado en la columna data
y lo compara con 30 en la cláusula WHERE
.
De igual forma podemos usar la Cláusula Order by o Inner Join de sql siempre que tomemos en cuenta la función JSON_EXTRACT
.
load_file para cargar un Json
El comando LOAD_FILE
en MySQL es utilizado para cargar un archivo en una columna de tipo BLOB
o TEXT
. No es posible usar LOAD_FILE
directamente para leer un archivo JSON y almacenarlo en una columna de tipo JSON
.
Para leer un archivo JSON y almacenarlo en una columna de tipo JSON
en MySQL, debes leer el archivo en un lenguaje de programación, parsear el contenido del archivo JSON y luego insertar el objeto JSON parseado en la columna correspondiente en la tabla de MySQL.
Otra forma de hacer es crear un cursor de mysql para poder pocesar el archivo cargado en la columna la cual puedes usar una tabla temporal esta practica puede crear un alto impaco den la memoria de tu servidor por lo cual te dejo un codigo para hacerlo desde python.
Por ejemplo, en Python puedes leer un archivo JSON y insertarlo en una columna de tipo JSON
en MySQL de la siguiente manera:
import json
import mysql.connector
# Conectar a la base de datos de MySQL
cnx = mysql.connector.connect(user='user', password='password', host='host', database='database')
cursor = cnx.cursor()
# Leer el archivo JSON
with open('data.json', 'r') as f:
data = json.load(f)
# Insertar el objeto JSON en la tabla
query = "INSERT INTO personas (data) VALUES (%s)"
cursor.execute(query, (json.dumps(data),))
# Guardar los cambios
cnx.commit()
# Cerrar la conexión a la base de datos
cnx.close()
En este ejemplo, se abre el archivo JSON con la función open
, se parsea el contenido del archivo con la función json.load
y se inserta el objeto parseado en la tabla de MySQL con la función cursor.execute
.
Conclusion
las última version de MySQL podemos tener datos almacenados en formato de documentos como exactamente igual que en base de datos NoSQL pero con todos los beneficios que ya usamos y conocemos. Con el tipo de datos NOSQL mysql entra en compentencia con las base de datos documentales.
Comentanos si te funciono hasta la proxima!!
Gracias :D!!