2016-12-07 78 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' –