我在 AWS Lambda 中有一个函数,它连接到 Twitter API 并返回与我通过事件提供的特定搜索查询匹配的推文。该函数的简化版本如下。我使用了一些辅助函数get_secret来管理 API 密钥,process_tweet它们限制了发回的数据,并执行诸如将创建日期转换为字符串之类的操作。最终结果是我应该取回字典列表。def lambda_handler(event, context): twitter_secret = get_secret("twitter") auth = tweepy.OAuthHandler(twitter_secret['api-key'], twitter_secret['api-secret']) auth.set_access_token(twitter_secret['access-key'], twitter_secret['access-secret']) api = tweepy.API(auth) cursor = tweepy.Cursor(api.search, q=event['search'], include_entities=True, tweet_mode='extended', lang='en') tweets = list(cursor.items()) tweets = [process_tweet(t) for t in tweets if not t.retweeted] return json.dumps({"tweets": tweets})然后在我的桌面上,我有调用 lambda 函数的代码。aws_lambda = boto3.client('lambda', region_name="us-east-1")payload = {"search": "paint%20protection%20film filter:safe"}lambda_response = aws_lambda.invoke(FunctionName="twitter-searcher", InvocationType="RequestResponse", Payload=json.dumps(payload))results = lambda_response['Payload'].read()tweets = results.decode('utf-8')问题是json.dumps在 lambda 中输出输出和在 Python 中读取有效负载之间的某个地方,数据变得很糟糕。例如,一个应该\n变成的换行符\\\\n,所有的双引号都存储为\\"并且 Unicode 字符都以 为前缀\\。所以,当我的桌面上的 Python 接收到转义字符时,所有被转义的东西。考虑返回的列表的这个元素(手动格式化)。'{\\"userid\\": 190764134, \\"username\\": \\"CapitalGMC\\", \\"created\\": \\"2018-09-02 15:00:00\\", \\"tweetid\\": 1036267504673337344, \\"text\\": \\"Protect your vehicle\'s paint! Find out how on this week\'s blog. \\\\ud83d\\\\udc47\\\\n\\\\nhttps://url/XYMxPhVhdH https://url/mFL2Zv8nWW\\"}'我可以使用正则表达式来解决一些问题(\\"和\\\\n),但 Unicode 很棘手,因为即使我匹配它,我如何用正确转义的字符替换它?当我在 R 中使用该aws.lambda包执行此操作时,一切都很好,没有奇怪的转义符。我在桌面上做错了什么 AWS Lambda 的响应会导致数据乱码?
2 回答

繁星淼淼
TA贡献1775条经验 获得超11个赞
在您的 lambda 函数中,您应该在响应正文中返回一个带有 JSON 对象的响应对象。
# Lambda Function
def get_json(event, context):
"""Retrieve JSON from server."""
# Business Logic Goes Here.
response = {
"statusCode": 200,
"headers": {},
"body": json.dumps({
"message": "This is the message in a JSON object."
})
}
return response

动漫人物
TA贡献1815条经验 获得超10个赞
不要使用 json.dumps()
我有一个类似的问题,当我刚刚返回 "body": content 而不是 "body": json.dumps(content) 时,我可以轻松访问和操作我的数据。在此之前,我得到了一个看起来像 JSON 的奇怪形式,但它不是。
添加回答
举报
0/150
提交
取消