2012-04-04 6 views
1

Итак, у меня есть то, что кажется довольно простой проблемой, хотя для жизни меня с отсутствием знаний о кодировании я не могу понять это. Извините всех неверных! Таким образом, у меня есть URL-адрес на страницу, содержащую подписанный запрос с строкой JSON (это страница на Facebook). Мне нужно получить эту строку JSON, а затем извлечь из нее только определенную часть. На данный момент я не могу контролировать форматирование URL.Извлечение определенного значения из строки JSON с помощью PHP

На странице, что она идет на меня есть следующий код:

<?php 
$signed_request = $_REQUEST['signed_request']; // Get the POST signed_request variable. 

if(isset($signed_request)) // Determine if signed_request is blank. 
{ 
$pre = explode('.',$signed_request); // Get the part of the signed_request we need. 
$json = base64_decode($pre['1']); // Base64 Decode signed_request making it JSON. 
$obj = json_decode($json,true); // Split the JSON into arrays. 

echo $obj['app_data']; 
} 
else 
{ 
die('No signed request avaliable.'); //If there is no signed_request, stop processing script. 
} 
?> 

Это работает отлично, и эхо $ OBJ [ 'App_Data']; prints: {q: "id_src = abc123456789",}

Для меня это строка JSON, поэтому я подумал, что могу запустить json_decode на этом, а затем распечатать id_src = abc123456789. Я пробовал так:

$appdata = $obj['app_data']; 
$idcode = json_decode($appdata,true); 

Вслед за эхо $ IDCODE [ «д»], но это только печатает один фигурную скобку. Я пробовал различные варианты, удаление «меток», удаление истины и т. Д.

Моя конечная цель - просто извлечь значение abc123456789, а не часть id_src. Я подумал, что, скорее всего, быстрее спросить, потому что я вряд ли смогу это выяснить в ближайшие дни.

Спасибо за помощь!

EDIT: Добавлен фрагмент $ json. echo $ json; печатает следующие

{"algorithm":"HMAC-SHA256","app_data":"{q:\"id_src=abc123456789\",}","issued_at":1333500860,"page":{"id":"380641958713853","liked":false,"admin":true},"user":{"country":"nz","locale":"en_GB","age":{"min":21}}} 

Будет ли это запятой после значения id_src, вызывающего проблемы?

+0

Вы можете разместить фрагмент возвращаемой JSON после того как вы 'base64_decode()' это? Возможно, ваш JSON стал испорченным где-то в процессе его извлечения, но мы не можем точно знать его без фрагмента. – Bojangles

+0

Отредактировано, добавлен фрагмент – Dave

ответ

2

Вы можете извлечь то, что вы хотите, как это:

preg_match('/"\\w+?=(\\w+?)"/', $obj['app_data'], $matches); 

print_r($matches); // Array ([0] => "id_src=abc123456789" [1] => abc123456789) 
+0

Мой герой! Спасибо, print_r ($ matches [1]) печатает именно то, что я хочу. – Dave

+0

Незначительный ответ, если это вам помогло: D –

0

{q:"id_src=abc123456789",} недействителен JSON. Попробуйте {"q":"id_src=abc123456789"}

+0

Хммм это то, что выдает функция json_decode, и это происходит из-за декодирования подписанного_запроса, переданного в iFrame. Таким образом, это может означать, что есть ошибка в способе добавления app_data к URL-адресу - есть ли способ извлечь значение id_src как есть? – Dave

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