Ваша проблема заключается в использовании идентификаторов PHP для доступа к содержимому. Самое простое решение - получить массив вместо объекта:
$data = json_decode ( $json , $assoc = true );
Это позволяет получить доступ к полям с:
echo $result['media$group']['media$description'];
Если вы хотите сохранить синтаксис объекта, это возможно с этим ключем:
echo $result->{'media$group'}->{'media$category'};
(Но массивы здесь более безопасны. Вы не получите фатальную ошибку, если изменение формата и свойства отсутствуют.)