Ошибка ввода типа данных Python при чтении сообщения из AWS SQS и его помещении в AWS DynamoDB - PullRequest
0 голосов
/ 20 июня 2019

Мой вариант использования - взять сообщение JSON из тела SQS и вставить данные в DynamoDB Использование лямбда-функции в Python. проблема в том, что я могу прочитать и распечатать сообщение JSON из очереди SQS в журнале наблюдения за облаком, но когда я пытаюсь вставить тот же JSON в DynamoDB, он выдает ошибку ниже

Недопустимый тип для параметра Item, значение: {'name': 2}, тип: класс 'str', допустимые типы: класс 'dict'

Ниже приведен лямбда-код, который я использую, и в строке № 12 произошла ошибка, которую я пытаюсь вставить, используя put_item

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 голосов
/ 28 июня 2019

после стольких исследований и разработок я могу найти решение, разделив строку запятой, а затем воссоздав json, который создаст 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)
...