![](/img/trans.png)
[英]UnicodeDecodeError in Python for CLI event, AWS Kinesis + Lambda
[英]Unable to decode kinesis event using a AWS Lambda written in Python
我正在使用 spring-cloud-stream-binder-kinesis 库推送一个简单的 JSON 有效负载。 该事件 100% 有效,我可以从另一个微服务中使用它。
我现在正在尝试使用 Python 3.7 启动并运行一个简单的 lambda。 我已经从流中创建了一个触发器并成功接收了事件(我可以在云监视日志中看到如下所示的输出),但是,当尝试解码有效负载以便我可以访问 JSON 属性时,它附加了一些奇怪的阻止我继续的角色。
以下是对 kinesis 流中的 base64 项进行解码后的日志输出:
b'\xff\x01\x0bcontentType\x00\x00\x00\x12"application/json"
{
"responseCode": 0,
"responseMessage": null,
"userId": 0,
"emailAddress": "ewqssdfdadasaewq@.com",
"name": "James",
"dateRegistered": null,
"socialNetwork": "Facebook"
}
这是简单的 Python 处理程序:
def lambda_handler(event, context):
for record in event['Records']:
#Kinesis data is base64 encoded so decode here
payload=base64.b64decode(record["kinesis"]["data"],validate=False)
print("Payload" + str(payload))
json_properties = json.loads(payload) <-- error here
错误:
[ERROR] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Traceback (most recent call last):
File "/var/task/Index.py", line 20, in lambda_handler
json_properties = json.loads(payload)
File "/var/lang/lib/python3.7/json/__init__.py", line 343, in loads
s = s.decode(detect_encoding(s), 'surrogatepass')
任何帮助,将不胜感激。
您可以尝试以下操作吗,这是在我正在使用的 python lambda 中工作的。 我假设您缺少 utf-8 转换:
from aws_kinesis_agg.deaggregator import deaggregate_records
def lambda_handler(event, context):
raw_kinesis_records = event['Records']
records = deaggregate_records(raw_kinesis_records)
for record in records:
#Kinesis data is base64 encoded so decode here
payload=base64.b64decode(record["kinesis"]["data"],validate=False)
payload_utf8=str(payload, 'utf-8')
print("Payload" + payload_utf8)
json_properties = json.loads(payload_utf8)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.