1

所以我遇到了一个看起来很简单的问题,尽管在我缺乏编码知识的情况下,我无法解决这个问题。请原谅任何用词不当!所以我有一个 URL 标题指向一个页面,其中包含一个带有 JSON 字符串的签名请求(它是一个 Facebook 页面)。我需要检索该 JSON 字符串,然后仅提取其中的特定部分。我目前无法控制 URL 的格式。

在它转到的页面上,我有以下代码:

<?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.
}
?>

效果很好,并且 echo $obj['app_data']; 打印:{q:"id_src=abc123456789",}

对我来说,它本身就是一个 JSON 字符串,所以我想我可以在上面运行一个 json_decode,然后打印出 id_src=abc123456789。我试过这样:

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

后跟 echo $idcode['q'],但这只是打印一个大括号。我尝试了各种变体,去除 ' ' 标记,去除 true 等。

我的最终目标是只提取 abc123456789 值,而不是 id_src 部分。我想问可能会更快,因为我不太可能在接下来的几天内弄清楚。

感谢大家的帮助!

编辑:添加了 $json 的片段。回声 $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 值后面的逗号导致问题?

4

2 回答 2

2

You can extract what you want like this:

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

print_r($matches); // Array ( [0] => "id_src=abc123456789" [1] => abc123456789 )
于 2012-04-04T00:56:26.193 回答
0

{q:"id_src=abc123456789",}不是有效的 JSON。尝试{"q":"id_src=abc123456789"}

于 2012-04-04T00:46:53.980 回答