DynamoDB JSON 转换器
在纯 JSON 与 DynamoDB 的属性值格式之间相互转换 —— 即时、在你的浏览器中进行。任何内容都不会发送到服务器。
纯 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 库,并按需在你的浏览器中加载。你粘贴的任何内容都不会发送到服务器。