为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Python 从 AWS Lambda 检索格式正确的 JSON

如何使用 Python 从 AWS Lambda 检索格式正确的 JSON

SMILET 2021-06-10 13:38:52
我在 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


查看完整回答
反对 回复 2021-06-16
?
动漫人物

TA贡献1815条经验 获得超10个赞

不要使用 json.dumps()

我有一个类似的问题,当我刚刚返回 "body": content 而不是 "body": json.dumps(content) 时,我可以轻松访问和操作我的数据。在此之前,我得到了一个看起来像 JSON 的奇怪形式,但它不是。


查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号