DynamoDB は JSON を保存できますか?

保存できます。DynamoDB は JSON をドキュメント型に対応づけて格納します。オブジェクトはマップ (M)、配列はリスト (L) で、32 階層までネストできます。1 アイテムは最大 400 KB です。DynamoDB の型システムは JSON の上位集合なので、どんな JSON ドキュメントもアイテムとして保存し、フィルターし、更新し、読み取ることができます。

JSON が DynamoDB の型にどう対応するか

  • JSON のオブジェクト → マップ (M)
  • JSON の配列 → リスト (L)
  • 文字列 / 数値 / 真偽値 / null → S / N / BOOL / NULL

リストとマップは 32 階層までネストできるので、JSON ドキュメント 1 つがそのまま 1 アイテムになります。

保存されるサイズは JSON より小さい

型タグ付きの転送フォーマットは無駄が多そうに見えるので、その分まで課金されると思われがちです。そうではありません。DynamoDB が課金の基準にするのはアイテムサイズであり、それは各属性名と各値の合計で、JSON のクォート、コロン、カンマ、波かっこは含みません。

ネストされた住所、2 行のアイテム配列、2 要素のタグリストを持つ、属性 9 つの注文ドキュメントを 3 通りの方法で測ると、こうなります。

測り方バイト数
転送される DynamoDB JSON607
同じドキュメントを素の最小化 JSON で447
課金対象のアイテムサイズ350

つまり保存されるアイテムは、出発点の JSON より 22% 小さく、それを運んだリクエストより 42% 小さいのです。仕事の大半をしているのは数値です。149.97 はテキストなら 6 文字ですが、格納は約 4 バイトです。文字列と名前は正確に数えられます。AWS は数値のエンコードを、おおよそ有効数字 2 桁につき 1 バイトと文書化しているので、350 は 1 バイト単位ではなく数バイトの精度と読んでください。

代償を払うことになるのは命名です。属性名とマップのキーがその 350 バイトのうち 148 バイト、アイテムの 42% を占め、コピーのたびにそれを支払います。10 億件のアイテムにわたって shippingAddressaddr に縮めるのは、本物の節約です。任意のドキュメントのサイズはアイテムサイズ計算ツールで測れます。これはエンジン自身の課金境界に照らして確認済みで、この計算で 1,024 バイトとなるアイテムは書き込みユニットを 1 つ、1,025 バイトなら 2 つ消費します。

往復で JSON が失うもの

DynamoDB は数値を 38 桁の精度の 10 進数として保存するので、JSON の数値は保存されるのではなく正規化されます。書き込んですぐ読み戻すと、こうなります。

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

最後の行が役に立つところです。DynamoDB はその整数を正確に保持しますが、Node で JSON.parse('{"id":9007199254740993}') を実行すると 9007199254740992 が返ります。ID が重要なら、文字列として保存してください。

DynamoDB がまったく受け付けない JSON ドキュメントが 2 つあります。空のキー({"": "x"}ValidationException: Empty attribute name を投げ、ネストされたマップの中でも同じです)と、精度の上限を超えた数値(ValidationException: DynamoDB only supports precision up to 38 digits を投げます)です。

唯一の注意点

DynamoDB の型は JSON の型の上位集合です。Binary (B) とセット (SS/NS/BS) の属性には直接対応する JSON がないので、素の JSON に戻すときセットは配列に、バイナリは base64 にシリアライズされます。

扱い方

ネストされた JSON の属性は、アイテム全体を書き直すことなく直接操作できます。マップのフィールドでフィルターしたり、リストの 1 要素だけ更新したり、といった具合です。

さらに詳しく

DynamoDB JSON とマーシャリングを参照し、素の JSON と DynamoDB JSON の変換は JSON コンバーターで行ってください。JSON のアイテムをビジュアルに編集するには DynoTable をダウンロードしてください。

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

2026-07-28 に測定・再現しました。3 つのバイト数は当サイトのアイテムサイズ計算ツールとシリアライズ済みリクエストから得たもので、数値の往復と 2 つの ValidationException の文字列は @aws-sdk/client-dynamodb 3.1095.0 経由の DynamoDB Local 3.3.0 のそのままの出力です。その文言は実稼働サービスと異なる場合があります。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。