AWS Lambda JSON到DynamoDB KeyError序列化JSON
问题描述:
我在AWS上设置了我的lambda函数,并希望将我的JSON插入到DynamoDB(NoSQL)中。我认为它与JSON(decimal_serializer)的序列化有关,但我可能是错的。感谢帮助!AWS Lambda JSON到DynamoDB KeyError序列化JSON
错误味精:
在序列化这个数据我获得以下错误
{
"errorMessage": "'male_confidence'",
"errorType": "KeyError"
}
JSON数据到INSERT:
{
"device_id": "abc876",
"recorded_at": "1496136878",
"customers": [
{
"male_confidence": "0.2",
"female_confidence": "0.8"
},
{
"male_confidence:": "0.1",
"female_confidence": "0.9"
}
]
}
lambda函数处理程序
import boto3
import json
def lambda_handler(event, context):
# TODO implement
client = boto3.client('dynamodb')
for customer in event['customers']:
client.put_item(TableName="cv_data_1", Item={'device_id': {"S": event['device_id']}, 'male_confindence': {"N": customer['male_confidence']}, 'female_confidence': {"N": customer['female_confidence']}, "timestamp":{ "N": event['recorded_at']}})
print('Successfully processed %s items.' % str(len(event['customers'])))
AWS输出日志错误(详细信息):
During handling of the above exception, another exception occurred:
09:23:38
Traceback (most recent call last):
09:23:38
File "/var/runtime/awslambda/bootstrap.py", line 463, in <module>
09:23:38
main()
09:23:38
File "/var/runtime/awslambda/bootstrap.py", line 459, in main
09:23:38
handle_event_request(request_handler, invokeid, event_body, context_objs, invoked_function_arn)
09:23:38
File "/var/runtime/awslambda/bootstrap.py", line 240, in handle_event_request
09:23:38
result = to_json(result)
09:23:38
File "/var/runtime/awslambda/bootstrap.py", line 215, in to_json
09:23:38
return json.dumps(obj, default=decimal_serializer)
09:23:38
File "/var/lang/lib/python3.6/json/__init__.py", line 238, in dumps
09:23:38
**kw).encode(obj)
09:23:38
File "/var/lang/lib/python3.6/json/encoder.py", line 199, in encode
09:23:38
chunks = self.iterencode(o, _one_shot=True)
09:23:38
File "/var/lang/lib/python3.6/json/encoder.py", line 257, in iterencode
09:23:38
return _iterencode(o, 0)
09:23:38
File "/var/runtime/awslambda/bootstrap.py", line 104, in decimal_serializer
09:23:38
raise TypeError(repr(o) + " is not JSON serializable")
09:23:38
TypeError: <FrameSummary file /var/task/lambda_function.py, line 8 in lambda_handler> is not JSON serializable
答
错字:
"male_confidence:": "0.1",
"female_confidence": "0.9"
“male_confidence:”
+0
非常感谢!我疯了':'。 – zer02
答
你有一个错字male_confidence:
,后注意额外的:
。试试这个
{
"device_id": "abc876",
"recorded_at": "1496136878",
"customers": [
{
"male_confidence": "0.2",
"female_confidence": "0.8"
},
{
"male_confidence": "0.1",
"female_confidence": "0.9"
}
]
}
从错误信息中可以看出''客户'之一的'male_confidence'缺失。 (没有双关语意)。你可以在lambda处理程序中打印'event',以便查看'event'包含的数据吗?输出将在cloudwatch日志中。 – nightgaunt
'{'device_id':'abc876','recorded_at':'1496136878','customers':[{'male_confidence':'0.2','female_confidence':'0.8'},{'male_confidence:':'0.1 ','female_confidence':'0.9'}]}',但是如果我在循环中输出'print(customer)',它会返回下面的'dict''。 – zer02
我在循环中打印了'customer ['male_confidence']',它返回了'0.2',第二个循环打破了上面的错误。 – zer02