php получить значение json из yql

бороться с извлечением необходимых данных из этого сложного json, хранящегося внутри переменной php.

Через 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>";

Не удалось получить требуемое значение...


person i need help    schedule 14.06.2012    source источник


Ответы (1)


Казалось бы, это строка JSONP, которая не является «чистым» json. Это JSON, который был обернут в функцию обратного вызова — JSONP используется для обхода ограничений междоменных запросов AJAX, и этот бизнес обратного вызова является частью этого.

Вам придется удалить начальный cbfun( и конечный );, чтобы получить настоящие данные JSON, которые затем можно передать в json_decode().

person Marc B    schedule 14.06.2012