所以我看起来似乎是一个非常简单的问题,但对于我的生活,由于缺乏编码知识,我无法弄明白。请原谅任何用词不当!所以我有一个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.
}
?>
工作正常,并回显$ obj [&#39; app_data&#39;];打印:{q:&#34; id_src = abc123456789&#34;,}
对我而言,这本身就是一个JSON字符串,所以我想我可以在其上运行json_decode,然后打印出id_src = abc123456789。我试过这样:
$appdata = $obj['app_data'];
$idcode = json_decode($appdata,true);
后跟echo $ idcode [&#39; q&#39;],但只打印一个花括号。我尝试了各种变化,删除了&#39; &#39;标记,删除真实等等。
我的最终目标是提取abc123456789值,而不是id_src部分。我认为这可能更快,因为我不太可能在接下来的几天内解决这个问题。
感谢所有人的帮助!
编辑:添加了$ 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 :(得分:2)
你可以像这样提取你想要的东西:
preg_match('/"\\w+?=(\\w+?)"/', $obj['app_data'], $matches);
print_r($matches); // Array ( [0] => "id_src=abc123456789" [1] => abc123456789 )
答案 1 :(得分:0)
{q:"id_src=abc123456789",}
无效JSON。试试{"q":"id_src=abc123456789"}