Проблемы манипулирования данными JSON в переполнении стека

Я не очень удобен с JSON, так что здесь. Я получаю уведомления Amazon SNS о переадресации адресов электронной почты слушателю (в PHP 5.5), который:

    $post = @file_get_contents("php://input");
$object = json_decode($post, true);

Это дает мне:

Type => Notification
MessageId => #####
TopicArn => #####
Message => {
"notificationType":"Bounce",
"bounce": {
"bounceSubType":"General",
"bounceType":"Permanent",
"bouncedRecipients":[{"status":"5.3.0","action":"failed","diagnosticCode":"smtp; 554 delivery error: dd This user doesn't have a yahoo.com account (testuser@yahoo.com) [0] - mta1217.mail.bf1.yahoo.com","emailAddress":"testuser@yahoo.com"}],
"reportingMTA":"dsn; ######",
"timestamp":"2014-10-27T16:37:42.136Z",
"feedbackId":"######"},
"mail": {
"timestamp":"2014-10-27T16:37:40.000Z",
"source":"myemail@mydomain.com",
"messageId":"######",
"destination":["testuser@yahoo.com"]
}
}

Я ожидал ассоциативный массив до конца, но вместо этого это массив только на верхнем уровне и со строками JSON внутри. Я перепробовал все, что мог придумать, включая json_decoding для других частей массива, но я изо всех сил пытаюсь получить доступ к данным простым способом. Мне нужен адрес электронной почты «назначения», который должен быть в $object['Message']['mail']['destination'][0],

Кто-нибудь может указать, что я здесь делаю не так? Благодарю.

0

Решение

Похоже, что $ object [‘Message’] также кодируется в json. Возможно, потому что он использует какой-то общий формат контейнера для результатов вызова службы. Попробуй это

$post = @file_get_contents("php://input");
$object = json_decode($post, true);
//Message contains a json string
$object['Message'] = json_decode($object['Message'], true);
//Then access the structure using array notation
echo $object['Message']['mail']['destination'][0];
2

Другие решения

Других решений пока нет …