0Pricing
SQL Academy · Lección

JSONB frente a JSON: cuándo usar cada uno

Elija entre JSON (texto, conserva los espacios en blanco) y JSONB (binario, indexable, con claves duplicadas eliminadas) para almacenar los datos adecuadamente.

JSONB frente a JSON: cuándo usar cada uno es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

Dos tipos de JSON en PostgreSQL

  • JSON: almacena el texto exacto que se introdujo
  • JSONB: formato binario descompuesto, con claves deduplicadas e indexable

JSON: almacenamiento de texto

JSON conserva los espacios en blanco, el orden de las claves y las claves duplicadas. Se analiza de nuevo en cada lectura. No admite índices GIN. Casi nunca es la opción adecuada para código nuevo.

INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs;     -- whatever the parser picks

JSONB: binario e indexable

JSONB:

  • Se almacena descompuesto → no es necesario volver a analizarlo al leer
  • Las claves duplicadas se combinan (prevalece la última)
  • No conserva el orden de las claves
  • Admite índices GIN
  • Admite operadores de rutas avanzados

Ejemplo de JSONB

Una tabla de eventos sencilla:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  data JSONB NOT NULL
);

INSERT INTO events (data) VALUES
  ('{"type":"login","user_id":42,"ip":"1.2.3.4"}');

Operadores de rutas

JSONB ofrece operadores avanzados (que se explican en la siguiente lección):

SELECT data->'user_id'   FROM events;       -- → JSONB
SELECT data->>'user_id'  FROM events;       -- → TEXT
SELECT data #>> '{user,name}' FROM events;  -- nested text path

Contención

El operador JSONB más útil: @> (contiene).

SELECT * FROM events WHERE data @> '{"type":"login"}';

-- Combined with a GIN index, this is fast even on billions of rows.

Igualdad de JSONB

Dos valores JSONB son iguales si su contenido coincide; el orden de las claves no importa:

SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB;    -- TRUE

Conversión entre tipos

Realice conversiones libremente:

SELECT '{"a":1}'::JSONB->'a';                -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a';             -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT;          -- 1 (as INT after extraction)

Cuándo NO utilizar JSONB

Si los datos tienen una estructura fija, utilice columnas reales:

  • Consultas más rápidas (no es necesario analizar documentos por cada fila)
  • Tipos y restricciones estrictos
  • Menor almacenamiento
  • Mejores estadísticas

JSONB resulta ideal cuando la estructura varía o evoluciona rápidamente.

Modelado híbrido

Práctica recomendada: utilice columnas estructuradas para los campos estables y JSONB para los datos adicionales variables:

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  ts TIMESTAMPTZ NOT NULL,
  event_type TEXT NOT NULL,
  user_id BIGINT,
  extra JSONB NOT NULL DEFAULT '{}'::JSONB
);

Validación

JSONB almacena cualquier JSON válido. Para aplicar restricciones estructurales, utilice restricciones CHECK o imponga el esquema en la capa de la aplicación:

ALTER TABLE events
  ADD CONSTRAINT data_has_type CHECK (data ? 'type');

Resumen

JSONB es mejor que JSON en casi todos los casos de producción.

  • JSONB: binario, indexado y con rutas rápidas
  • JSON: solo permite conservar el texto de ida y vuelta
  • Utilice JSONB para estructuras variables y columnas reales para estructuras fijas

Comprobación rápida

Está diseñando una tabla nueva para almacenar documentos JSON cargados por usuarios que consultará por contenido. ¿JSON o JSONB?

Preguntas frecuentes

¿La lección «JSONB frente a JSON: cuándo usar cada uno» es gratis?

Sí — el texto completo de «JSONB frente a JSON: cuándo usar cada uno» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «JSONB frente a JSON: cuándo usar cada uno»?

Elija entre JSON (texto, conserva los espacios en blanco) y JSONB (binario, indexable, con claves duplicadas eliminadas) para almacenar los datos adecuadamente. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «JSONB frente a JSON: cuándo usar cada uno»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. JSONB frente a JSON: cuándo usar cada uno
  2. Operadores de rutas: -> ->> @>
  3. Indexación de JSONB con GIN
  4. Modelado: cuándo JSONB supera a la normalización
← Volver a SQL Academy