Ошибка PHP json_decode — Mandrill Webhook

Я пытаюсь обработать данные webhook Mandrills. Я получу запрос $_POST с некоторыми данными Json, при обработке этих данных у меня возникла странная проблема.

Если я декодирую данные, переданные POST, я просто получаю пустую переменную :( Любая идея, почему?

РЕДАКТИРОВАТЬ:

самая странная вещь когда-либо ... Если я использую 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

person user3359899    schedule 27.02.2014    source источник
comment
var_dump(json_decode($getMessage,true)); ?   -  person Gilly    schedule 27.02.2014
comment
var_dump($getMessage) == true / var_dump(json_decode($getMessage,true)) == false   -  person user3359899    schedule 27.02.2014
comment
echo json_last_error_msg() после вызова метода jsone_decode().   -  person Rohit Awasthi    schedule 27.02.2014
comment
Я попробовал этот код на своем собственном сервере, и все работает.   -  person Gilly    schedule 27.02.2014
comment
Запросите пример текстового файла из данных веб-перехватчика mandrills и вставьте его сюда для проверки: jsonlint.com   -  person Gilly    schedule 27.02.2014
comment
json правильный, и если я использую его напрямую, он работает довольно хорошо - единственная вещь, которая не будет работать, - это использовать его на лету из данных POST :(   -  person user3359899    schedule 27.02.2014
comment
Попробуйте так: $getMessage =(json_decode(utf8_encode($_POST['mandrill_events']), true));   -  person Gilly    schedule 27.02.2014
comment
это работает oO большое спасибо :D   -  person user3359899    schedule 27.02.2014


Ответы (4)


Используйте стрипы. В твоем случае:

$json = $_POST['mandrill_events'];
print_r(json_decode(stripslashes($json),true));
person Paweł Walaszek    schedule 10.04.2014

Я реализовал так, он может работать нормально, пожалуйста, проверьте это.

      $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 ";
person Raja Rama Mohan Thavalam    schedule 05.09.2014

Вероятно, на вашем сервере включены magic_quotes. Это должно работать:

 $events = json_decode(stripslashes($_POST['mandrill_events']),1);
 print_r($events);
person Rid Iculous    schedule 05.08.2014

Когда вы печатаете данные POST, они отображаются как html. Возможно, в ваших POST-данных вместо двойных кавычек есть " или ". Проверь это.

person Rohit Awasthi    schedule 27.02.2014
comment
Я только что перепроверил его, но он точно такой же, как и массив, опубликованный выше - ничего не добавлено и не удалено; ( - person user3359899; 27.02.2014