O DynamoDB consegue armazenar JSON?
Sim. O DynamoDB consegue armazenar JSON mapeando-o para seus tipos de documento: map (M) para objetos e list (L) para arrays, aninhados até 32 níveis de profundidade. Cada item comporta até 400 KB. O sistema de tipos do DynamoDB é um superconjunto do JSON, então qualquer documento JSON pode ser armazenado como um item e depois filtrado, atualizado e lido.
Como o JSON mapeia para os tipos do DynamoDB
- Objeto JSON → Map (M)
- Array JSON → List (L)
- string / número / booleano / null → S / N / BOOL / NULL
Listas e mapas podem aninhar até 32 níveis de profundidade, então um documento JSON completo vira um único item.
O tamanho armazenado é menor que o do JSON
O formato de tráfego com marcação de tipo parece um desperdício, e as pessoas presumem que são cobradas por ele. Não são. O DynamoDB cobra pelo tamanho do item, que é a soma de cada nome de atributo mais cada valor, sem nenhuma das aspas, dois-pontos, vírgulas ou chaves do JSON.
Um documento de pedido com nove atributos, um endereço aninhado, um array de duas linhas de itens e uma lista de duas tags mede de três formas diferentes:
| Medição | Bytes |
|---|---|
| DynamoDB JSON como enviado no tráfego | 607 |
| O mesmo documento como JSON simples minificado | 447 |
| Tamanho de item cobrado | 350 |
Ou seja, o item armazenado é 22% menor que o JSON de onde você partiu, e 42% menor que a requisição que o transportou. Os números fazem a maior parte do trabalho: 149.97 armazena em cerca de 4 bytes contra 6 caracteres de texto. Strings e nomes são contados exatamente; a AWS documenta a codificação numérica como aproximadamente um byte a cada dois dígitos significativos, então leia 350 como preciso até alguns bytes, e não até o byte.
O que custa caro é dar nomes. Nomes de atributos e chaves de mapa respondem por 148 daqueles 350 bytes, 42% do item, e você os paga em cada cópia. Encurtar shippingAddress para addr em um bilhão de itens é uma economia real. Você pode dimensionar qualquer documento na calculadora de tamanho de item, que nós conferimos contra o próprio limite de cobrança do motor: itens que ela coloca em 1.024 bytes consomem uma unidade de escrita, e 1.025 consome duas.
O que o JSON perde na ida e volta
O DynamoDB armazena números como decimais com 38 dígitos de precisão, então um número JSON é normalizado em vez de preservado. Escrito e lido de volta na sequência:
{"price": 19.90} -> {"price": {"N": "19.9"}}
{"qty": 1.0} -> {"qty": {"N": "1"}}
{"limit": 1e5} -> {"limit": {"N": "100000"}}
{"id": 9007199254740993} -> {"id": {"N": "9007199254740993"}}Essa última linha é a útil. O DynamoDB mantém o inteiro exatamente, e JSON.parse('{"id":9007199254740993}') no Node te dá 9007199254740992. Se os IDs importam, armazene-os como strings.
Dois documentos JSON que o DynamoDB não aceita de jeito nenhum: uma chave vazia ({"": "x"} levanta ValidationException: Empty attribute name, e o mesmo vale dentro de um mapa aninhado) e um número além do limite de precisão, que levanta ValidationException: DynamoDB only supports precision up to 38 digits.
A única ressalva
Os tipos do DynamoDB são um superconjunto dos do JSON. Atributos Binary (B) e Set (SS/NS/BS) não têm equivalente direto em JSON, então sets serializam para arrays e binário para base64 quando você converte de volta para JSON simples.
Trabalhando com isso
Você pode operar diretamente sobre atributos JSON aninhados — filtrar por um campo de mapa, atualizar um elemento de lista — sem reescrever o item inteiro.
Aprofunde-se
Veja DynamoDB JSON e marshalling, e converta entre JSON simples e DynamoDB JSON com o conversor de JSON. Baixe o DynoTable para editar itens JSON visualmente.
Referências
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB Update – JSON, Expanded Free Tier, Flexible Scaling, Larger Items — AWS News Blog
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.
Medido e reproduzido em 2026-07-28. As três contagens de bytes vêm da nossa própria calculadora de tamanho de item e da requisição serializada; as idas e voltas dos números e as duas strings de ValidationException são saída literal do DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0, cuja redação das mensagens pode diferir do serviço ao vivo.