2016-12-07 3 views
1

ファイルがS3にアップロードされるたびに、S3がSQSにメッセージを書き込めることを感謝します。しかし、PythonからSQSメッセージ本体のファイル名( "key": "filename.txt")にアクセスすることは、複数の辞書を持つリストを含む辞書であるため、少し問題があります。S3によって作成されたAWS SQSメッセージにアクセスするPython

S3イベントによってメッセージが作成されたときに誰もがSQSメッセージ本文のファイル名にアクセスしましたか?

完全なメッセージは次のとおりです。私はJSON適切であるためにあなたの質問を修正しました

{ 
    "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 "'は有効なJSONやPythonの辞書構文ではありませんので、いくつかのエスケープ文字がないと思います –

+0

@ cricket_007これは誤植だと思います。 。実際には '' object ":{" key ":" filename.txt "、" size ":...' ... yes、standard JSONです。 OPは(擬似コード)from_json(this) - > Records [0] - > object-> keyを抽出する必要があります。おそらくあなたはそれを助けることができますか?私はこのJSONデータ構造に精通していますが、私はPythonの人ではありません。レコード配列には常にメンバーが1つしかありません(このデータ構造は、マルチプルAWSサービスで使用される一般的な構造です。これが配列なのです)。 –

答えて

1

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

出力filename.txt

+0

ご協力ありがとうございます。私はエラーを受け取りました - > TypeError:JSONオブジェクトは 'list'ではなくstrでなければなりません。次の3つのコマンドが機能し、ファイル名を返します。 jsonmsg = json.loads(message [0] .body) jsonmsg ["Records"] [0] ["s3 "] [" object "] [" key "] – RandomTask

+0

はい、受信したメッセージの形式がわかりませんでした。しかし、あなたはそれを理解しました..メッセージ[0] .body' –

関連する問題