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

用PHP从JSON字符串中提取特定值,php,json,Php,Json,所以我有一个看起来很简单的问题,尽管对于我这个缺乏编码知识的人来说,我无法解决这个问题。请原谅任何用词不当!因此,我有一个指向页面的URL标题,其中包含一个带有JSON字符串的签名请求(这是一个Facebook页面)。我需要检索那个JSON字符串,然后提取它的一个特定部分。目前我无法控制URL的格式 在它转到的页面上,我有以下代码: <?php $signed_request = $_REQUEST['signed_request']; // Get the POST signed_req

所以我有一个看起来很简单的问题,尽管对于我这个缺乏编码知识的人来说,我无法解决这个问题。请原谅任何用词不当!因此,我有一个指向页面的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$idcode['q'],但只打印一个小括号。我尝试了各种变体,删除了“”标记,删除了true,等等

我的最终目标是只提取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值后面的逗号吗?

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

您可以这样提取您想要的内容:

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

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

你能在
base64\u decode()
it之后发布一段返回的JSON吗?在获取JSON的过程中,您的JSON可能在某个地方损坏了,但是如果没有一个片段,我们无法确定。嗯,这就是JSON_decode函数打印出来的内容,它来自于对传入iFrame的签名_请求的解码。因此,这可能意味着在将app_数据附加到URL的方式中存在错误-是否有任何方法可以按原样提取id_src值?我的英雄!谢谢,print_r($matches[1])正好打印出我想要的内容。如果答案对你有帮助,请竖起大拇指:D