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

上传JSON至DynamoDB时遭遇字符串错误求助

问题根源与解决方案

你遇到的核心问题是DynamoDB的Resource API不接受AttributeValue格式的数据——你的JSON是DynamoDB低层级Client API使用的结构(每个值用{s: "xxx"}包装),但你用的boto3.resource('dynamodb')提供的Table接口,期望的是原生Python数据类型(直接传字符串、数字等,不需要额外包装),这就是字符串错误的来源。

解决步骤

1. 先搞清楚两种API的差异

  • Client API(boto3.client('dynamodb')):需要手动构造AttributeValue格式(比如{'S': 'string'})
  • Resource API(你正在使用的):自动处理类型转换,只需要传入普通的键值对字典

2. 方案一:手动转换数据(适合纯字符串场景)

直接提取每个字段的s值,生成Resource API能识别的原生字典:

import boto3
import json

# 加载你的JSON文件
with open('your-json-file.json', 'r') as f:
    raw_dynamo_data = json.load(f)

# 转换为Resource API需要的格式
clean_item = {key: value['s'] for key, value in raw_dynamo_data.items()}

# 写入DynamoDB
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
table = dynamodb.Table('Entities')

try:
    response = table.put_item(Item=clean_item)
    print(f"数据写入成功!响应信息: {response}")
except Exception as e:
    print(f"写入失败,错误信息: {str(e)}")

3. 方案二:使用TypeDeserializer(通用方案,支持所有DynamoDB类型)

如果你的数据后续可能包含数字、布尔值、列表等其他类型,用boto3内置的TypeDeserializer自动转换更稳妥:

import boto3
import json
from boto3.dynamodb.types import TypeDeserializer

# 初始化反序列化器
deserializer = TypeDeserializer()

# 加载原始JSON
with open('your-json-file.json', 'r') as f:
    raw_dynamo_data = json.load(f)

# 转换每个字段
clean_item = {
    key: deserializer.deserialize(value) 
    for key, value in raw_dynamo_data.items()
}

# 写入DynamoDB
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
table = dynamodb.Table('Entities')

try:
    response = table.put_item(Item=clean_item)
    print(f"数据写入成功!响应信息: {response}")
except Exception as e:
    print(f"写入失败,错误信息: {str(e)}")

额外提示

如果你想保留AttributeValue格式的写法,可以改用Client API:

client = boto3.client('dynamodb', region_name='us-west-2')
client.put_item(TableName='Entities', Item=raw_dynamo_data)

不过Resource API的写法更简洁直观,日常使用更推荐前者。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:24:01