2012-06-14 49 views
0

从这个复杂的json存储在php变量中的斗争中提取必要的数据。php从yql中检索json值

通过php脚本,我调用了yql。 返回并分配给$ retarr的数据;

再往,$ retarr [2]存储满值如下:

$debugarrays= print_r($retarr[2], true); 
echo "<pre>"; 
echo $debugarrays; 
echo "</pre>"; 


cbfunc({ 
    "query":{ 
     "count":10, 
     "created":"2012-06-13T09:13:45Z", 
     "lang":"en-US", 
     "results":{ 

     "contact":[  

      { 
       "created":"2006-10-29T04:32:07Z", 
       "updated":"2006-10-29T04:32:07Z", 
       "uri":"http://social.yahooapis.com/v1/user/MNQJOMYDQYLY2FZSMROV4QDA6MI/contact/12", 
       "isConnection":"false", 
       "id":"12", 
       "fields":[ 
        { 
        "created":"2006-10-29T04:32:07Z", 
        "updated":"2006-10-29T04:32:07Z", 
        "uri":"http://social.yahooapis.com/v1/user/MNQJOMYDQYLY2FZSMROV4QDA6MI/contact/12/email/6", 
        "id":"6", 
        "type":"email", 
        "value":"[email protected]", 
        "editedBy":"OWNER" 
        }, 
        { 
        "created":"2006-10-29T04:32:07Z", 
        "updated":"2006-10-29T04:32:07Z", 
        "uri":"http://social.yahooapis.com/v1/user/MNQJOMYDQYLY2FZSMROV4QDA6MI/contact/12/name/5", 
        "id":"5", 
        "type":"name", 
        "value":{ 
         "givenName":"'Jaq'", 
         "middleName":null, 
         "familyName":null, 
         "prefix":null, 
         "suffix":null, 
         "givenNameSound":null, 
         "familyNameSound":null 
        }, 
        "editedBy":"OWNER" 
        } 
       ] 
      } 


     ] 
     } 
    } 
}); 


$sJson= $retarr[2]; 
$aNative = json_decode($sJson); 
print_r($aNative); 


echo $retarr[2]->fields[0]->id."<br>"; 
echo $retarr[2]->fields[0]->type."<br>"; 
echo $retarr[2]->fields[0]->value."<br>"; 

得不到所需的值...

回答

0

似乎这是一个JSONP字符串,不是'纯粹'的json。它的JSON被封装在回调函数中 - JSONP用于解决AJAX跨域请求的限制,这个回调业务就是其中的一部分。

你必须去掉领先的cbfun(和尾随);才能得到真正的JSON数据,然后你可以将其传递给json_decode()。

+0

感谢您的提示。 –