2015-01-28 1 views
-1

Я пытаюсь создать веб-сайт для Mandrill, который отправит электронное письмо отправителю, когда отсканированное ранее письмо отскакивает. Я могу получить данные в формате JSON от Mandrill, но не могу разобрать, что данные для отправки к исходному отправителю:Невозможно проанализировать поля JSON из-за ведущей скобки в PHP

<?php 
require_once 'mandrill-api-php/src/Mandrill.php'; //Not required with Composer 
$mandrill = new Mandrill('*myapikey*'); 

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

$subject = $jsondata['event']; 
$message = "STRIPSLASHES: ".$json."----JSONDATA----".$jsondata; 

$emailAddress = "*[email protected]*"; 
mail($emailAddress, $subject, $message); 
?> 

Вот как выглядит JSON данные $, как в переменной $ сообщений. Это буквальное копирование и вставка из тестовой электронной почте я получаю:

STRIPSLASHES: [{ "событие": "спам", "сообщение": { "TS": 1365109999, "субъект":» Это пример webhook message "," email ":" [email protected] "," отправитель ":" [email protected] "," tags ": [" webhook-example "]," opens " : [{ "TS": 1365111111}], "щелкает": [{ "TS": 1365111111, "URL": "http://mandrill.com"}], "состояние": "отправлено", "метаданные" : { "user_id": 111}, "_ идентификатор": "exampleaaaaaaaaaaaaaaaaaaaaaaaaa", "_ версия": "exampleaaaaaaaaaaaaaaa"}, "_ идентификатор": "exampleaaaaaaaaaaaaaaaaaaaaaaaaa", "ц": 1422475458}, { "событие": "спам", msg ": {" ts ": 1365109999," subject ":« Это пример сообщения веб-хоста »,« email »:« [email protected] »,« отправитель »:« [email protected] » , "метки": [ "webhook-пример"], "открывает": [{ "ц": 1365111111}], "щелчки": [{ "TS": 1365111111, "URL": "HTTP: // мандрил. ком "}]," состояние» : "Послал", "метаданные": { "user_id": 111}, "_ ID": "exampleaaaaaaaaaaaaaaaaaaaaaaaaa1", "_ версия": "exampleaaaaaaaaaaaaaaa"}, "_ идентификатор": "exampleaaaaaaaaaaaaaaaaaaaaaaaaa1", "ц": 1422475458}] - --- JSONDATA ---- Array

Я заметил, что $ json выводит данные json, но имеет ведущую и конечную скобки, а не начиная с squiggly bracket. Поэтому я решил назвать данные так, как если бы они были массивом, но безрезультатно.

В тесте вместо $ json = stripslashes (... Я скопировал и вставил данные json выше как литерал. После того как я удалил скобки для начала и окончания, мне удалось проанализировать некоторые данные.

+1

может преобразовать его в строку (используя stringify), затем удалить/заменить те ведущие/конечные скобки, а затем разобрать json? В прошлом у меня была аналогичная проблема с проектом, и мне приходилось либо избегать специальных символов в моих значениях, либо изменять тип и пытаться проанализировать json. удачи с ним. – tamak

+1

От квадратной скобки до квадратной скобки действует JSON. http://jsonlint.com 'STRIPSLASHES:' недействителен JSON, ему не хватает кавычек. –

+0

'echo $ jsondata [0] ['msg'] ['sender'];' – PhearOfRayne

ответ

0

Почему вы не попробовать удалить скобки с помощью PHP?

$json = ltrim($json, "["); 
$json = rtrim($json, ']"); 

А затем передать его в декодер?

+2

Это плохая идея, так как это действительно JSON. –

+0

Мой плохой - я думал, что анализ был проблемой, так как вы написали: «Как только я удалил ведущие/конечные скобки, я смог разобрать некоторые данные» –

+0

Я не писал, что OP сделал @GratusD –

0

на самом деле, я был в состоянии исправить это «захват» в формате JSON данных а, по-другому, форматируя его правильно, когда я его получаю:

$rawdata = file_get_contents('php://input'); 
$decodeurl = urldecode($data); 
$jsonready = substr($decodeurl, 16); 
$data = json_decode($jsonready, true); 

$recipient = $data['0']['msg']['email']; 
//etc, etc, etc 

Я последовал этому примеру:

https://sendy.co/forum/discussion/1137/using-mandrill-webhook-for-bounces-complaints/p1

Я надеюсь, что это помогает людям, которые пытаются использовать API Mandrill в!

 Смежные вопросы

  • Нет связанных вопросов^_^