PHP json_decode错误 - Mandrill Webhook

时间:2014-02-27 10:13:14

标签: php arrays json mandrill

我试图处理Mandrills webhook数据。 我将获得带有一些Json数据的$ _POST请求,而处理这些数据时我遇到了一个奇怪的问题。

如果我解码POST给出的数据,我只得到一个空的var :( 知道为什么吗?

编辑:

有史以来最奇怪的事情......如果我直接使用Json它不起作用,但是如果我将它插入数据库并从那里取出它,它可以很好地工作

$json = $_POST['mandrill_events'];
print_r(json_decode($json,true));
//False

$data['content'] = $_POST['mandrill_events'];
$id = $db->insert('mail', $data);
$get = $db->select('content', 'mail', 'id = "'.(int) $id.'"');  //= mysql_fetch_array($data,MYSQL_ASSOC)
$json = $get['content'];
print_r(json_decode($json,true));
//True

旧代码

/*
print_r($_POST) 

Array
(
    [mandrill_events] => [{"event":"inbound","ts":1393490345,"msg":{"raw_msg":"Received: from"}}]
    (shortend)
)
*/

$test_var = '[{"event":"inbound","ts":1393490345,"msg":{"raw_msg":"Received: from"}}]';

$getMessage = $_POST['mandrill_events'];
print_r($getMessage);
//Until now everything works fantastic
$getMessage = json_decode($getMessage,true);
print_r($getMessage);
//Nothing - the output is empty ;( 

$getTestMessage = json_decode($test_var,true);
print_r($getTestMessage);
//works fine

4 个答案:

答案 0 :(得分:5)

使用stripslashes。 在你的情况下:

$json = $_POST['mandrill_events'];
print_r(json_decode(stripslashes($json),true));

答案 1 :(得分:2)

我已经像这样实现了它可以正常工作plz检查这个

      $data = $_POST;

    $restult_data_decode = json_decode($data['mandrill_events']);


   // print_r($restult_data_decode);
    //exit;




    $message_id     =  $restult_data_decode[0]->_id;

    $status         =  $restult_data_decode[0]->msg->state;

    $reject_reason  =  $restult_data_decode[0]->msg->reject;


    echo "message_id............ $message_id  .............status:$status..........reject reason : $reject_reason ";

答案 2 :(得分:1)

您的服务器上可能已启用magic_quotes。这应该有效:

 $events = json_decode(stripslashes($_POST['mandrill_events']),1);
 print_r($events);

答案 3 :(得分:0)

当您打印POST数据时,它会回显为html。可能在您的POST数据中有""正在取代双引号。检查一下。