2016-12-07 77 views
1

无论何时将文件上传到S3,我都明白S3可以向SQS写入消息。但是,从Python访问SQS消息体中的文件名(“key”:“filename.txt”)有点问题,因为它是一个包含多个字典的列表的字典。访问由S3创建的AWS SQS消息的Python

当有人通过S3事件创建消息时,是否有人访问过SQS消息体中的文件名

完整的信息是:

{ 
    "Records": [{ 
     "eventVersion": "2.0", 
     "eventSource": "aws:s3", 
     "awsRegion": "us-west-2", 
     "eventTime": "2016-12-04T22:14:52.325Z", 
     "eventName": "ObjectCreated:Put", 
     "userIdentity": { 
      "principalId": "ABC123" 
     }, 
     "requestParameters": { 
      "sourceIPAddress": "12.345.687.899" 
     }, 
     "responseElements": { 
      "x-amz-request-id": "ABC123", 
      "x-amz-id-2": "ABCDEF" 
     }, 
     "s3": { 
      "s3SchemaVersion": "1.0", 
      "configurationId": "MyQueueName", 
      "bucket": { 
       "name": "mybucket", 
       "ownerIdentity": { 
        "principalId": "ABC123" 
       }, 
       "arn": "arn:aws:s3:::mybucket" 
      }, 
      "object": { 
       "key": "filename.txt", 
       "size": 2310, 
       "eTag": "defg123", 
       "sequencer": "00345" 
      } 
     } 
    }] 
} 
+1

你肯定心不是你要解析一个标准的JSON响应消息? –

+0

另外,''object':“key”:“filename.txt”'isnt有效的JSON或Python字典语法,所以我认为你错过了一些转义字符 –

+0

@ cricket_007我认为这是一个错字 - 这个消息已被消毒。它实际上是“对象”:{“key”:“filename.txt”,“size”:...'...是的,标准的JSON。 OP需要提取(伪代码)from_json(this) - >记录[0] - > object-> key。也许你可以帮忙吗?我对这个JSON数据结构非常熟悉,但我不是一个Python人。 Records数组总是只有1个成员(这个数据结构是多重AWS服务使用的常用数据结构,这就是为什么这是一个数组)。 –

回答

1

,我已经修复你的问题是正确的JSON

import json 
# message = get_sqs_message() 
message = json.loads(message) 
print(message["Records"][0]["s3"]["object"]["key"]) 

应该输出filename.txt

+0

感谢您的帮助。我收到一个错误 - > TypeError:JSON对象必须是str,而不是'list'。以下3个命令可以工作并返回文件名:message = queue.receive_messages(MaxNumberOfMessages = 1) jsonmsg = json.loads(message [0] .body) jsonmsg [“Records”] [0] [“s3 “] [”object“] [”key“] – RandomTask

+0

是的,我不知道您收到的消息的格式。但是,你知道了..'message [0] .body' –