从AWS SQS读取消息并将其放入AWS DynamoDB后,Python dict数据类型错误

时间:2019-06-20 15:22:44

标签: python-3.x aws-lambda amazon-dynamodb boto3 amazon-sqs

我的用例是从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)      

但是,它可以将SQS JSON打印到云监视日志,如下所示 enter image description here

1 个答案:

答案 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)