0

PHP変数内に格納されたこの複雑な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":"jaq@lifemastr.com",
                     "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>";

必要な値を取得できません...

4

1 に答える 1

0

これはJSONP文字列のように見えますが、これは「純粋な」jsonではありません。コールバック関数でラップされたのはJSONです-JSONPはAJAXクロスドメインリクエストの制限を回避するために使用され、このコールバックビジネスはその一部です。

実際のJSONデータを取得するには、先頭cbfun(と末尾);を削除する必要があります。その後、このデータをjson_decode()に渡すことができます。

于 2012-06-14T03:11:52.360 に答える