Я использую python 3.6 и подключаюсь к dynamodb для извлечения данных. json.dumps(item, indent=4, cls=DecimalEncoder)
ошибки на линии json.dumps(item, indent=4, cls=DecimalEncoder)
Любые предложения о том, что я делаю неправильно.
import json
import boto3
import decimal
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('MY_TABLE')
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
def lambda_handler(event, context):
# TODO implement
category_id = event["queryStringParameters"]["id"]
response = table.get_item(
Key={
'category': category_id
}
)
item = response['Item']
return {
"isBase64Encoded": False,
"statusCode": '200',
"headers": {},
"body": json.dumps(item, indent=4, cls=DecimalEncoder)
}
JSON не поддерживает наборы, поэтому вы должны сделать свой клиентский декодер для json.dumps
способным конвертировать наборы в списки:
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, set):
return list(o)
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)