转换为标准对象和访问标准对象的不同数据类型(即数组或属性)


Json Convert to Std Object and Access Different data types of a Std Object (i.e Array or Attribute)?

我有一个json字符串转换为std对象的类型。其中一些被转换为Array,一些被转换为Std对象属性。我试图解码属性"[bouncedreceivers]"从这些,它有时是一个数组,有时是一个std对象属性。

无法去任何地方,因为我尝试了下面的代码,这只适用于只有如果它是一个JSON对象属性,但不作为数组工作。

$mail=json_decode($data->bounce->bouncedRecipients);

这里是返回的数据类型的a个样本。其他变量类型[bouncedreceivers]成为std对象属性。

[2016-09-10 04:15:10] SNS邮件

stdClass Object
(
    [notificationType] => Bounce
    [bounce] => stdClass Object
        (
            [bounceType] => Permanent
            [bounceSubType] => Suppressed
            [bouncedRecipients] => Array
                (
                    [0] => stdClass Object
                        (
                            [emailAddress] => exmaple@gmail.com
                            [action] => failed
                            [status] => 5.1.1
                            [diagnosticCode] => Amazon SES has suppressed sending to this address because it has a recent history of bouncing as an invalid address. For more information about how to remove an address from the suppression list, see the Amazon SES Developer Guide: http://docs.aws.amazon.com/ses/latest/DeveloperGuide/remove-from-suppressionlist.html 
                        )
                )
            [timestamp] => 2016-09-09T22:45:24.978Z
            [feedbackId] => 01000157112sasasec-76df-11e6-9e95-5db9bsasas-000000
            [reportingMTA] => dns; amazonses.com
        )
    [mail] => stdClass Object
        (
            [timestamp] => 2016-09-09T22:45:05.000Z
            [source] => info@example.com
            [sourceArn] => arn:aws:ses:ssss.com
            [sendingAccountId] => 973549asasas9
            [messageId] => 0100015711207assaasa-4c54-afb2-34f9868a4e1c-000000
            [destination] => Array
                (
                    [0] => example@gmail.com
                )
        )
)

假设您已经解码了JSON数据,那么您只需执行以下操作即可:

foreach ($data->bounce->bouncedRecipients as $bouncedRecipient) {
    // $bouncedRecipient is an object so use it as such, ie.
    echo $bouncedRecipient->emailAddress;
}

如果你需要检查类型,你也可以这样做:

if (is_object($data->bounce->bouncedRecipients)) {
    $data->bounce->bouncedRecipients = [$data->bounce->bouncedRecipients];
} elseif (!is_array($data->bounce->bouncedRecipients)) {
    die("What is this data you have given me?");
}

然后继续执行前面的foreach或类似的循环。