DynamoDB può memorizzare JSON?

Sì. DynamoDB può memorizzare JSON mappandolo sui suoi tipi documento: map (M) per gli oggetti e list (L) per gli array, annidati fino a 32 livelli. Ogni Item arriva a 400 KB. Il sistema di tipi di DynamoDB è un superset di JSON, quindi qualsiasi documento JSON può essere memorizzato come Item e poi filtrato, aggiornato e letto.

Come JSON si mappa sui tipi DynamoDB

  • Oggetto JSON → Map (M)
  • Array JSON → List (L)
  • stringa / numero / booleano / null → S / N / BOOL / NULL

List e map possono annidarsi fino a 32 livelli, quindi un documento JSON completo diventa un solo Item.

La dimensione memorizzata è più piccola del JSON

Il formato di trasporto con i tag di tipo sembra uno spreco, e la gente presume di pagarlo. Non è così. DynamoDB addebita sulla dimensione dell'Item, che è la somma di ciascun nome di attributo più ciascun valore, senza nessuna delle virgolette, dei due punti, delle virgole o delle graffe del JSON.

Un documento d'ordine con nove attributi, un indirizzo annidato, un array di due righe d'ordine e una lista di due tag si misura in tre modi diversi:

MisuraByte
DynamoDB JSON così come viaggia sul filo607
Lo stesso documento come JSON semplice minifiato447
Dimensione dell'Item fatturata350

Quindi l'Item memorizzato è il 22% più piccolo del JSON da cui sei partito, e il 42% più piccolo della richiesta che l'ha trasportato. Sono i numeri a fare gran parte del lavoro: 149.97 occupa circa 4 byte contro 6 caratteri di testo. Stringhe e nomi sono conteggiati esattamente; AWS documenta la codifica dei numeri come circa un byte ogni due cifre significative, quindi leggi 350 come accurato a pochi byte e non al byte singolo.

Quello che ti costa davvero è la nomenclatura. I nomi degli attributi e le chiavi delle map valgono 148 di quei 350 byte, il 42% dell'Item, e li paghi su ogni copia. Accorciare shippingAddress in addr su un miliardo di Item è un risparmio reale. Puoi dimensionare qualsiasi documento nel calcolatore della dimensione degli Item, che abbiamo verificato rispetto al confine di fatturazione del motore stesso: gli Item che calcola a 1.024 byte consumano un'unità di scrittura, e 1.025 ne consumano due.

Cosa perde il JSON nel round trip

DynamoDB memorizza i numeri come decimali con 38 cifre di precisione, quindi un numero JSON viene normalizzato invece che preservato. Scritto e riletto subito dopo:

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

L'ultima riga è quella utile. DynamoDB mantiene l'intero esattamente, mentre JSON.parse('{"id":9007199254740993}') in Node ti dà 9007199254740992. Se gli ID contano, memorizzali come stringhe.

Due documenti JSON che DynamoDB non accetta proprio: una chiave vuota ({"": "x"} solleva ValidationException: Empty attribute name, e lo stesso vale dentro una map annidata) e un numero oltre il limite di precisione, che solleva ValidationException: DynamoDB only supports precision up to 38 digits.

L'unica avvertenza

I tipi di DynamoDB sono un superset di quelli di JSON. Gli attributi Binary (B) e Set (SS/NS/BS) non hanno un equivalente JSON diretto, quindi i set vengono serializzati in array e il binario in base64 quando riconverti in JSON semplice.

Lavorarci

Puoi operare direttamente sugli attributi JSON annidati — filtrare su un campo di una map, aggiornare un singolo elemento di una list — senza riscrivere l'intero Item.

Approfondisci

Vedi DynamoDB JSON e marshalling, e converti tra JSON semplice e DynamoDB JSON con il convertitore JSON. Scarica DynoTable per modificare gli Item JSON visivamente.

Riferimenti

Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.

Misurato e riprodotto il 2026-07-28. I tre conteggi in byte provengono dal nostro calcolatore della dimensione degli Item e dalla richiesta serializzata; i round trip dei numeri ed entrambe le stringhe ValidationException sono output alla lettera di DynamoDB Local 3.3.0 tramite @aws-sdk/client-dynamodb 3.1095.0, la cui formulazione dei messaggi può differire da quella del servizio live.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.