我的用例是从SQS主体获取JSON消息并将数据插入DynamoDB 在python中使用lambda函数。 问题是我能够从SQS队列读取JSON消息并将其打印到云监视日志中,但是当我尝试在dynamoDB中插入相同的JSON时,它在错误
下给出参数项的无效类型,值:{'name':2},类型:class'str',有效类型:class'dict'
下面是我正在使用的lambda代码,在尝试使用put_item插入的第12行发生了错误
import json
import boto3
dynamodb = boto3.resource('dynamodb')
dynamoTable = dynamodb.Table('message')
def lambda_handler(event, context):
for record in event['Records']:
data1 = record["body"]
jsondata1 = json.loads(data1)
print(jsondata1)
dynamoTable.put_item(Item=jsondata1)
答案 0 :(得分:0)
经过如此多的研发,我能够找到解决方案的方法是用逗号分割字符串,然后重新创建一个json,它将创建dict数据类型而不是字符串的
下面是相同解决方案的代码
import json
import boto3
import ast
dynamodb = boto3.resource('dynamodb')
dynamoTable = dynamodb.Table('message')
def lambda_handler(event, context):
for record in event['Records']:
data1 = record["body"]
jsondata1 = json.loads(data1)
mess1 = jsondata1["Message"]
id = jsondata1["MessageId"]
jsonmess = json.loads(mess1)
s = jsonmess.replace("{" ,"")
finalstring = s.replace("}" , "")
split = finalstring.split(",")
dict = {'messageID':id}
for x in split:
keyvalue = x.split(":")
print(keyvalue)
dict[keyvalue[0]]=keyvalue[1]
dynamoTable.put_item(Item=dict)