Saltar al contenido principal
eLearner.app
Módulo 15 · Lección 1 de 256/57 en el curso~15 min
Lecciones del módulo (1/2)

Integración de JSON y JSONB

Integración JSON y JSONB

PostgreSQL ha reescrito las reglas de las bases de datos combinando la tranquilizadora y colosal naturaleza ACID de SQL con la flexibilidad dinámica y fluctuante de NoSQL. Y lo hizo ofreciendo columnas dedicadas de forma nativa a guardar datos JSON.

Advertencia: en postgres casi siempre se recomienda utilizar JSONB. "B" significa Binario: los documentos JSON insertados en estas columnas pierden su formato puramente textual, pero ganan en que pueden ser validados, consultados con un rendimiento muy alto, manipulados e incluso indexados con el clásico INDEX B-tree o GIN.

Navegando por JSON: el operador "Flecha"

Lamentablemente, la base de datos `ecommerce` actualmente no tiene columnas JSON puras predefinidas. Sin embargo, podemos crear JSON temporales y "transmitirlos" palabra por palabra.

Cuando se trabaja con JSON, los operadores que descienden a objetos y matrices son -> (mantiene los datos como un formato jsonb/json puro) o su versión "extendida" ->> (convierte los datos json encontrados palabra por palabra).

Ejemplo académico si hubiera una columna JSON de "metadatos":

SQL
-- Cerca il valore associato alla chiave info
SELECT metadata->'info' FROM users;

-- Cerca dentro info, e prendi testuale city
SELECT metadata->'info'->>'city' FROM users;
Ejercicio#sql.m15.l1.e1
Intentos: 0Cargando...

Consultamos JSON sobre la marcha. Proyecte este json literal `'{"user": {"name": "Mario"}}'::json` y use el operador `->` asociado textualmente (`->>`) para extraer su 'nombre', llamando a la columna extraída 'nombre_usuario'.

Cargando editor...
Mostrar pista

Transmita a ::json o ::jsonb y use ->'usuario'->>'nombre'.

Solución disponible después de 3 intentos

Ejercicio#sql.m15.l1.e2
Intentos: 0Cargando...

¿Qué pasa si pasamos una matriz? El acceso a una matriz en json_b en postgres se realiza mediante INDEX (base 0). Extraiga el SEGUNDO elemento palabra por palabra de `'["A", "B", "C"]'::json` y llámelo 'letra'.

Cargando editor...
Mostrar pista

->>1 (¡es de base cero!)

Solución disponible después de 3 intentos