Я попытался использовать JSON-декодирование, чтобы получить фид API-интерфейса youtube. Однако, когда я вставляю результат JSON в http://www.jsonlint.com/
я заметил что-то вроде
"media$group": { "media$category": [
К сожалению, некоторые символы отклоняются php. Вот мой код, я попытался удалить этот символ $
, но, возможно, не удался. Как я могу это решить?
$url = 'http://gdata.youtube.com/feeds/api/videosq=football&orderby=published&v=2&alt=json'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_REFERER, $url); $body1 = curl_exec($ch); $body = str_replace('$','', $body1); curl_close($ch); $data = json_decode($body); foreach ($data->feed->entry as $result) { ... }
Ваша проблема заключается в использовании идентификаторов PHP для доступа к содержимому. Простейшим решением здесь было бы получить массив вместо объекта:
$data = json_decode ( $json , $assoc = true );
Это позволяет получить доступ к полям:
echo $result['media$group']['media$description'];
Если вы хотите сохранить синтаксис объекта, это возможно с помощью этого kludge:
echo $result->{'media$group'}->{'media$category'};
(Но массивы более безопасны здесь. Вы не получите фатальную ошибку, если формат и свойства отсутствуют.)
Эта работа:
<?php $url = 'http://gdata.youtube.com/feeds/api/videos?q=football&orderby=published&v=2&alt=json'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_REFERER, $url); $body1 = curl_exec($ch); $body = str_replace('$','', $body1); curl_close($ch); $data = json_decode($body); foreach ($data->feed->entry as $result) { var_dump($result); } ?>