DynamoDB peut-il stocker du JSON ?

Oui. DynamoDB peut stocker du JSON en le projetant sur ses types document : map (M) pour les objets et liste (L) pour les tableaux, imbriqués jusqu'à 32 niveaux de profondeur. Chaque élément contient jusqu'à 400 Ko. Le système de types de DynamoDB est un sur-ensemble de JSON : n'importe quel document JSON peut donc être stocké comme élément, puis filtré, modifié et lu.

Comment JSON se projette sur les types DynamoDB

  • objet JSON → Map (M)
  • tableau JSON → Liste (L)
  • chaîne / nombre / booléen / null → S / N / BOOL / NULL

Listes et maps peuvent s'imbriquer jusqu'à 32 niveaux de profondeur, donc un document JSON complet devient un seul élément.

La taille stockée est plus petite que le JSON

Le format de transport typé a l'air gaspilleur, et les gens supposent qu'il leur est facturé. Ce n'est pas le cas. DynamoDB facture sur la taille de l'élément, c'est-à-dire la somme de chaque nom d'attribut plus chaque valeur, sans les guillemets, deux-points, virgules et accolades de JSON.

Un document de commande à neuf attributs, avec une adresse imbriquée, un tableau de deux lignes et une liste de deux tags, se mesure de trois façons différentes :

MesureOctets
DynamoDB JSON tel qu'envoyé sur le réseau607
Le même document en JSON ordinaire minifié447
Taille d'élément facturée350

L'élément stocké est donc 22 % plus petit que le JSON dont tu es parti, et 42 % plus petit que la requête qui l'a transporté. Ce sont les nombres qui font l'essentiel du travail : 149.97 se stocke sur environ 4 octets contre 6 caractères de texte. Les chaînes et les noms sont comptés exactement ; AWS documente l'encodage des nombres à environ un octet pour deux chiffres significatifs, donc lis 350 comme exact à quelques octets près, pas à l'octet.

Ce qui te coûte, en revanche, ce sont les noms. Les noms d'attribut et les clés de map représentent 148 de ces 350 octets, 42 % de l'élément, et tu les paies sur chaque copie. Raccourcir shippingAddress en addr sur un milliard d'éléments est une vraie économie. Tu peux dimensionner n'importe quel document dans le calculateur de taille d'élément, que nous avons confronté à la frontière de facturation du moteur lui-même : les éléments qu'il place à 1 024 octets consomment une unité d'écriture, et 1 025 en consomment deux.

Ce que JSON perd à l'aller-retour

DynamoDB stocke les nombres comme des décimaux à 38 chiffres de précision : un nombre JSON est donc normalisé plutôt que préservé. Écrit puis relu directement :

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

C'est la dernière ligne qui est utile. DynamoDB garde l'entier exact, alors que JSON.parse('{"id":9007199254740993}') en Node te donne 9007199254740992. Si les identifiants comptent, stocke-les comme chaînes.

Deux documents JSON que DynamoDB refuse tout net : une clé vide ({"": "x"} lève ValidationException: Empty attribute name, et la même règle s'applique dans une map imbriquée), et un nombre au-delà de la limite de précision, qui lève ValidationException: DynamoDB only supports precision up to 38 digits.

La seule réserve

Les types de DynamoDB sont un sur-ensemble de ceux de JSON. Les attributs Binaires (B) et Ensembles (SS/NS/BS) n'ont pas d'équivalent JSON direct : les ensembles se sérialisent donc en tableaux et le binaire en base64 quand tu reconvertis vers du JSON ordinaire.

Travailler avec

Tu peux opérer directement sur des attributs JSON imbriqués — filtrer sur un champ de map, mettre à jour un élément de liste — sans réécrire l'élément entier.

Aller plus loin

Voir DynamoDB JSON et marshalling, et convertis entre JSON ordinaire et DynamoDB JSON avec le convertisseur JSON. Télécharge DynoTable pour modifier visuellement des éléments JSON.

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Mesuré et reproduit le 2026-07-28. Les trois comptages d'octets viennent de notre propre calculateur de taille d'élément et de la requête sérialisée ; les allers-retours sur les nombres et les deux chaînes ValidationException sont la sortie brute de DynamoDB Local 3.3.0 via @aws-sdk/client-dynamodb 3.1095.0, dont la formulation des messages peut différer de celle du service en production.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.