2012-06-14 2 views
0

Я пытаюсь извлечь необходимые данные из этого json, хранящегося внутри переменной php. Еще не эксперт в этой структуре данных еще ...json yql data retrieval через php

Удовлетворение каждого из нас знает, как заставить его работать.

мне нужно цикл по результатам, а затем прочитать каждый контакт, чтобы получить 1. Значение где тип = электронный 2. значение-> GivenName где тип = имя (всякий раз, когда элемент существует)

декодируется значение 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' - это объект, во втором и третьем - массив, поэтому перед использованием поля 'fields' проверяется массив или объект. Поэтому используйте [is_object] (http://php.net/manual/en/function.is-object.php), и если это правда, используйте '->' иначе вы можете использовать 'foreach' или идти по индексам. –