2012-06-14 88 views
0

我很难从这个存储在php变量中的json中提取必要的数据。 尚未在这种数据结构方面的专家...json yql通过php检索数据

想知道任何人都知道如何使其工作。

我需要通过结果循环,然后读取每个接触得到 1的值,其中类型=电子邮件 2.值 - >给定名称其中type =名(每当元件存在)

的JSON解码值如下面

$aNative = json_decode($retval); 

echo "lang: " . $aNative->query->lang . "<br>"; (works)  

(when go deeper, fail to retrieve any value...) 

echo "created: " . $aNative->results->contact[0]->created . "<br>"; 


foreach($aNative->$query->results as $contact) 
{ 
    echo $contact->id; 
    echo $contact->fields[0]->type; 

    if($contact->fields[0]->type=="email") 
    { 
     echo $contact->fields[0]->value; 
    } 

} 

完整JSON:

{ 
    "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/BNQJOMYDQYLY2FZSMROV4QDA6MI/contact/14", 
       "isConnection":"false", 
       "id":"14", 
       "fields":{ 
        "created":"2006-10-29T04:32:07Z", 
        "updated":"2006-10-29T04:32:07Z", 
        "uri":"http://social.yahooapis.com/v1/user/BNQJOMYDQYLY2FZSMROV4QDA6MI/contact/14/email/11", 
        "id":"11", 
        "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", 
       "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" 
        } 
       ] 
      } 



     ] 
     } 
    } 
} 

回答

0

你已经忘记了query。你要访问的结果,例如以这样的方式

$aNative->query->results->contact[0]->created 

,并查看整个你的代码试图访问错误的性质很多次。例如在foreach中,您应该使用$aNative->query->results->contact而不是$aNative->results,因为results它是一个对象而不是数组。

+0

我正面临另一个挑战,致命错误:不能使用stdClass类型的对象作为数组在....相信由于第一次接触没有字段[0]和字段[1],任何想法得到周围? –

+1

在第一个'contact''fields'是object,第二个和第三个是数组,所以在使用'fields'之前,先检查它是数组还是对象。所以使用[is_object](http://php.net/manual/en/function.is-object.php),如果它是真的,使用' - >'否则你可以使用'foreach'或者通过索引。 –