Python 在DynamoDB中插入多行json

Python 在DynamoDB中插入多行json,python,amazon-web-services,lambda,amazon-dynamodb,Python,Amazon Web Services,Lambda,Amazon Dynamodb,我有以下json文件 {"columnwithoutname":"structureet","nofinesset":810001792,"nofinessej":810001784} {"columnwithoutname":"structureet","nofinesset":670797117,"nofinessej":670010339} 我想用Lambda把它插入DynamoDB。这就是我所做的: def lambda_handler(event, context): buc

我有以下json文件

{"columnwithoutname":"structureet","nofinesset":810001792,"nofinessej":810001784}
{"columnwithoutname":"structureet","nofinesset":670797117,"nofinessej":670010339}
我想用Lambda把它插入DynamoDB。这就是我所做的:

def lambda_handler(event, context):
    bucket=event['b']
    file_key=event['c']
    table=event['t']
    recList=[]
    s3 = boto3.client('s3')
    dynamodb = boto3.client('dynamodb')
    obj= s3.get_object(Bucket=bucket, Key=file_key)
    recList=obj['Body'].read().split('\n')
    for row in recList:
        response = dynamodb.put_item(TableName='test-abe', Item=row)
但我有一个错误:

 "errorMessage": "Parameter validation failed:\nInvalid type for parameter Item

显然,我还需要精确地确定每列的类型,以便它可以被接受。不管怎样,你想自动完成吗?我希望所有列都是字符串。谢谢

您需要操纵每一行,以获得“S”格式:

import json

for row in recList:
    row_dict = json.loads(row)
    ddb_row_dict = {k:{"S": v} for (k,v) in row_dict.items()}
    response = dynamodb.put_item(TableName='test-abe', Item=ddb_row_dict)

DynamoDB客户端希望
参数为
dict
(per)

当您执行
recList=obj['Body'].read().split('\n')
时,您得到的是一个
str
列表,因此将
str
传递给一个需要
dict
的参数显然会失败

另一个要考虑的是,DyDoDB <强>客户端>以非常具体的格式预期项目,并带有显式指定的属性数据类型。如果您想阅读JSON并简单地编写它,我建议使用DynamoDBresource,如下所示:

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(table_name)
table.put_item(item)

Table.put\u item()
接受简单的
dict
,无需为每个属性指定数据类型,所以您只需从文件中读取,将其转换为dict并发送()。

谢谢。我可以将我的json行转换为dict并使用table.put_item插入它们吗?@Haha通常这就足够了。您可以使用
json.loads(row)
将json加载到dict中并对其进行测试。