使用PHP从JSON字符串中提取特定值

时间:2012-04-04 00:42:55

标签: php json

所以我看起来似乎是一个非常简单的问题,但对于我的生活,由于缺乏编码知识,我无法弄明白。请原谅任何用词不当!所以我有一个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值之后是逗号吗?

2 个答案:

答案 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"}