简体   繁体   English

如何阅读Amazon SNS JSON响应

[英]How to Read Amazon SNS JSON Response

How do I get the TranscriptionJobName and TranscriptionJobStatus from Amazon SNS's response to an http endpoint? 如何从Amazon SNS对http端点的响应中获取TranscriptionJobName和TranscriptionJobStatus?

When I try my code below, the name variable in my text file is blank but the message from Amazon logs into my file.txt just fine. 当我在下面尝试我的代码时,文本文件中的name变量为空,但是来自Amazon的消息记录到我的file.txt中就可以了。

What I get from SNS in the file.txt (some values omitted): 我从file.txt中的SNS得到什么(省略了一些值):

Array
(
    [Type] => Notification
    [MessageId] => MSG_ID
    [TopicArn] => TOPIC_ARN
    [Message] => {"version":"0","id":"msg_id","detail-type":"Transcribe Job State Change","source":"aws.transcribe","account":"account_number","time":"2019-03-07T18:19:08Z","region":"us-east-1","resources":[],"detail":{"TranscriptionJobName":"702edfc","TranscriptionJobStatus":"COMPLETED"}}
    [Timestamp] => 2019-03-07T18:19:09.194Z
    [SignatureVersion] => 1
    [Signature] => sign==
    [SigningCertURL] => sign_cert.pem
    [UnsubscribeURL] => unsubscribe_url
)

What I get from namer.txt: 我从namer.txt得到的结果是:

{

My code is able to read the message sent to the endpoint but trying to parse further into the response returns blank in a txt file I'm using to debug.. 我的代码能够读取发送到端点的消息,但是尝试进一步解析为响应,将在我用来调试的txt文件中返回空白。

My Code Attempt: 我的代码尝试:

    //Endpoint.php

 //Fetch the raw POST body containing the message
    $postBody = file_get_contents('php://input');

    // JSON decode the body to an array of message data
    $message = json_decode($postBody, true);


    if ($message) {

    //just for debugging put entire response in file.txt
    file_put_contents('file.txt', print_r($message, true));


    //if its a Notification 

    if ($message['Type'] === 'Notification'){

     //then get the name of the Transcription Job 

        $name = $message['Message']['detail'][0]['TranscriptionJobName'];

    //put that into namer.txt
        file_put_contents('namer.txt', $name,true);






                                }

    }

For some reason, it seems like $message['Message'] still is a string and not an array. 由于某种原因,似乎$message['Message']仍然是字符串而不是数组。

You need to decode it before you can access elements in it: 您需要先对其进行解码,然后才能访问其中的元素:

// Decode
$message['Message'] = json_decode($message['Message'], true);

// Now you can access it using:
$name = $message['Message']['detail']['TranscriptionJobName']; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM