¿Puede DynamoDB almacenar JSON?

Sí. DynamoDB puede guardar JSON mapeándolo a sus tipos de documento: map (M) para objetos y list (L) para arrays, anidados hasta 32 niveles. Cada Item admite hasta 400 KB. El sistema de tipos de DynamoDB es un superconjunto de JSON, así que cualquier documento JSON puede guardarse como Item y luego filtrarse, actualizarse y leerse.

Cómo se mapea JSON a los tipos de DynamoDB

  • Objeto JSON → Map (M)
  • Array JSON → List (L)
  • string / number / boolean / null → S / N / BOOL / NULL

Las listas y los mapas pueden anidarse hasta 32 niveles, así que un documento JSON completo se convierte en un solo Item.

El tamaño almacenado es menor que el del JSON

El formato de red con etiquetas de tipo parece un desperdicio, y la gente asume que se le factura por él. No es así. DynamoDB cobra por el tamaño del Item, que es la suma de cada nombre de atributo más cada valor, sin nada de las comillas, dos puntos, comas ni llaves de JSON.

Un documento de pedido de nueve atributos, con una dirección anidada, un array de dos líneas de artículos y una lista de dos etiquetas, se mide de tres formas distintas:

MediciónBytes
DynamoDB JSON tal como se envía por la red607
El mismo documento como JSON plano minificado447
Tamaño de Item facturado350

Así que el Item almacenado es un 22% más pequeño que el JSON del que partiste, y un 42% más pequeño que la petición que lo transportó. Los números hacen la mayor parte del trabajo: 149.97 ocupa unos 4 bytes frente a 6 caracteres de texto. Las cadenas y los nombres se cuentan exactamente; AWS documenta la codificación de números como aproximadamente un byte por cada dos dígitos significativos, así que lee 350 como algo exacto salvo unos pocos bytes, no salvo uno.

Lo que sí te cuesta son los nombres. Los nombres de atributo y las claves de mapa suponen 148 de esos 350 bytes, un 42% del Item, y los pagas en cada copia. Acortar shippingAddress a addr en mil millones de Items es un ahorro real. Puedes medir cualquier documento en la calculadora de tamaño de Item, que comprobamos contra el propio límite de facturación del motor: los Items que sitúa en 1.024 bytes consumen una unidad de escritura, y 1.025 consume dos.

Qué pierde el JSON en el viaje de ida y vuelta

DynamoDB guarda los números como decimales con 38 dígitos de precisión, así que un número JSON se normaliza en vez de conservarse. Escrito y leído justo después:

{"price": 19.90}             ->  {"price": {"N": "19.9"}}
{"qty": 1.0}                 ->  {"qty": {"N": "1"}}
{"limit": 1e5}               ->  {"limit": {"N": "100000"}}
{"id": 9007199254740993}     ->  {"id": {"N": "9007199254740993"}}

Esa última línea es la útil. DynamoDB conserva el entero exacto, y JSON.parse('{"id":9007199254740993}') en Node te da 9007199254740992. Si los ID importan, guárdalos como cadenas.

Dos documentos JSON que DynamoDB no aceptará en absoluto: una clave vacía ({"": "x"} lanza ValidationException: Empty attribute name, y lo mismo vale dentro de un mapa anidado) y un número que supere el límite de precisión, que lanza ValidationException: DynamoDB only supports precision up to 38 digits.

La única advertencia

Los tipos de DynamoDB son un superconjunto de los de JSON. Los atributos Binary (B) y Set (SS/NS/BS) no tienen equivalente directo en JSON, así que los conjuntos se serializan como arrays y lo binario como base64 cuando conviertes de vuelta a JSON plano.

Trabajar con ello

Puedes operar directamente sobre atributos JSON anidados — filtrar por un campo de un mapa, actualizar un elemento de una lista — sin reescribir el Item entero.

Profundiza

Mira DynamoDB JSON y marshalling, y convierte entre JSON plano y DynamoDB JSON con el conversor de JSON. Descarga DynoTable para editar Items JSON visualmente.

Referencias

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Medido y reproducido el 2026-07-28. Los tres recuentos de bytes vienen de nuestra propia calculadora de tamaño de Item y de la petición serializada; los viajes de ida y vuelta de los números y ambas cadenas ValidationException son salida literal de DynamoDB Local 3.3.0 mediante @aws-sdk/client-dynamodb 3.1095.0, cuya redacción de los mensajes puede diferir de la del servicio en vivo.

Trabaja con DynamoDB sin la Consola

Un cliente de escritorio rápido para DynamoDB que ejecuta el SQL real que DynamoDB no puede — JOINs, GROUP BY, agregaciones — con edición visual y un agente de IA con tus propias claves de Bedrock.

Prueba gratuita de 30 días, sin tarjeta — después, el plan Free sin límite de tiempo.