免费工具

DynamoDB JSON 转换器

在纯 JSON 与 DynamoDB 的属性值格式之间相互转换 —— 即时、在你的浏览器中进行。任何内容都不会发送到服务器。

纯 JSON
{
  "pk": "USER#1234",
  "sk": "PROFILE",
  "name": "Ada Lovelace",
  "age": 36,
  "scores": [10, 20, 30],
  "active": true
}

字符串 Set、数字 Set、二进制 Set 和二进制值无法用纯 JSON 表示:JSON 数组总是转换为 List(L)。这些类型只会在将 DynamoDB JSON 转回纯 JSON 时出现。

DynamoDB JSON
加载转换器中…

纯 JSON 与 DynamoDB JSON 对比

DynamoDB 的底层传输格式会为每个值标注其类型。在你的应用看到 { "age": 36 } 的地方,API 看到的是 { "age": { "N": "36" } }。这种属性值形式正是 AWS CLI 打印出来的内容,也是出现在 CloudWatch 日志和 DynamoDB Streams 记录中的内容,以及你粘贴进底层 PutItem 调用中的内容。SDK 的文档客户端会将其隐藏,因此这两种格式在调试时常常会交织出现。

本转换器使用与 AWS SDK 相同的 marshalling 库,因此输出与 SDK 生成的内容完全一致。它完全在你的浏览器中运行 —— 该库按需加载,你的数据绝不会离开页面 —— 因此可以安全地粘贴来自生产表的真实项。

有两种边界情况会被显式处理。超出 JavaScript 安全整数范围的数字会被保留为字符串,而不是悄悄四舍五入;格式错误的属性值 —— 例如携带非数字文本的数字类型 —— 会触发明确的错误,而不是被悄悄强制转换。目标是一次你可以信赖的忠实转换,而不是有损的近似。

刚接触类型标签? DynamoDB 数据类型 通过示例逐一讲解每种属性值类型。

常见问题

什么是 DynamoDB JSON?

DynamoDB JSON(即属性值格式)会将每个值包裹在一个标注其类型的单键对象中:字符串为 { "S": "abc" },数字为 { "N": "5" },列表为 { "L": [...] },映射为 { "M": {...} }。底层 DynamoDB API 以及 AWS CLI 等工具使用这种形式,而 SDK 的文档客户端和大多数应用代码使用纯 JSON。本转换器在两者之间相互转换。

为什么我的大数字变成了字符串?

DynamoDB 将数字存储为 38 位的十进制类型,没有精度限制,但 JavaScript 在超过 2^53 时会丢失精度。为了保持无损,在将 DynamoDB JSON 转换为纯 JSON 时,大于该安全范围的数字会以字符串形式承载。如果将这样的数字以裸露的纯 JSON 数字形式粘贴进来,则会触发错误,因为在本工具看到它之前,它就已经丢失了精度。

我可以转换 Set 和二进制值吗?

从 DynamoDB JSON 转为纯 JSON 时可以 —— 字符串/数字/二进制 Set 会变成数组,二进制值会变成 base64 字符串。反向转换则无法推断它们:纯 JSON 没有 Set 类型,因此数组总是转换为 List(L)。请直接在 DynamoDB JSON 一侧编写 Set 和二进制值。

我的数据会离开浏览器吗?

不会。转换完全在客户端进行,使用官方的 AWS marshalling 库,并按需在你的浏览器中加载。你粘贴的任何内容都不会发送到服务器。

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。