Cfoote7 Cfoote7 - 1 month ago 44
JSON Question

Using Boto3 in python to acquire results from dynamodb and parse into a usable variable or dictionary

I used to be a SQL query master in MySQL and SQL server, but I'm far from mastering nosql and dynamo db just seems very over simplified. Anyways no rants, I'm trying to just acquire the most recent entry into dynamo db or to parse out the results I get so I can skim the most recent item off the top.

this is my code

from __future__ import print_function # Python 2/3 compatibility
import boto3
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr

# Helper class to convert a DynamoDB item to JSON.
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)

dynamodb = boto3.resource('dynamodb', region_name='us-west-2',
endpoint_url="https://foo.foo.foo/aws")

table = dynamodb.Table('footable')
response = table.scan(
Select="ALL_ATTRIBUTES",
)

for i in response['Items']:
print(json.dumps(i, cls=DecimalEncoder))


My results are a lot of the following that I'd like to either parse or if someone knows the code to just select the top entry that would be great.

{"MinorID": 123, "Location": "123westsideave"}
{"MinorID": 321, "Location": "456nowhererd"}
{"MinorID": 314, "Location": "123westsideave"}

Answer

at the end of my code where it says "print(json.dumps(i, cls=DecimalEncoder))" I changed that to "d = ast.literal_eval((json.dumps(i, cls=DecimalEncoder)))" I also added import ast at the top. It worked beautifully.

import ast

table = dynamodb.Table('footable')
response = table.scan(
    Select="ALL_ATTRIBUTES",
    )

for i in response['Items']:
    d = ast.literal_eval((json.dumps(i, cls=DecimalEncoder)))
Comments