You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何转换AWS DynamoDB带类型标记数据?Boto3是否有原生方法?

DynamoDB带类型标记数据的转换方法

首先明确:Boto3确实提供了原生方法来处理这种带类型标记的DynamoDB数据转换,无需手动从头实现复杂逻辑。

一、Boto3原生转换方案

使用boto3.dynamodb.types.TypeDeserializer类的deserialize方法,它专门用于将DynamoDB的原生格式(带类型标记的结构)转换为Python原生数据类型。

代码示例

import boto3
from boto3.dynamodb.types import TypeDeserializer

# 原始DynamoDB带类型标记的数据
dynamodb_raw_data = {
 "a": {
  "S": "AAAA"
 },
 "myList": {
  "L": [
   {
    "S": "T1"
   },
   {
    "S": "T2"
   },
   {
    "S": "TH"
   }
  ]
 },
 "checkList": {
  "L": [
   {
    "M": {
     "id": {
      "S": "telesurveyor"
     },
     "check": {
      "BOOL": True
     }
    }
   }
  ]
 },
 "createdAt": {
  "N": "1672842152365"
 }
}

# 初始化反序列化器
deserializer = TypeDeserializer()
# 遍历Item的每个键值对完成转换
parsed_data = {key: deserializer.deserialize(value) for key, value in dynamodb_raw_data.items()}

print(parsed_data)

执行后会直接输出你需要的无类型标记的干净数据结构。

二、手动实现方案(不依赖Boto3类型工具)

如果场景特殊,需要自己实现解析逻辑,可以写一个递归函数处理DynamoDB的常见类型(S字符串、N数字、BOOL布尔、L列表、M嵌套对象):

代码示例

def parse_dynamodb_item(item):
    if isinstance(item, dict):
        # 处理单个类型标记的字段(如{"S": "xxx"})
        if len(item) == 1:
            type_key, value = next(iter(item.items()))
            match type_key:
                case 'S':
                    return value
                case 'N':
                    # 优先转整数,失败则转浮点数
                    try:
                        return int(value)
                    except ValueError:
                        return float(value)
                case 'BOOL':
                    return value
                case 'L':
                    # 递归解析列表中的每个元素
                    return [parse_dynamodb_item(elem) for elem in value]
                case 'M':
                    # 递归解析嵌套对象
                    return {k: parse_dynamodb_item(v) for k, v in value.items()}
        # 直接处理嵌套的对象结构
        else:
            return {k: parse_dynamodb_item(v) for k, v in item.items()}
    # 非字典类型直接返回
    return item

# 调用解析函数
parsed_data = parse_dynamodb_item(dynamodb_raw_data)
print(parsed_data)

这个函数会递归处理所有层级的嵌套结构,输出符合要求的原生数据格式。

内容的提问来源于stack exchange,提问作者Utopion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:00:58