@madkev1n

Как получить ответ в переменную из json_decode?

Есть код, который получает json по API и заносит в переменную ответ "content":

$API = 'rzhunemogu.ru/RandJSON.aspx?CType=1';
$joke_json = json_decode(file_get_contents($API), TRUE);
$joke_content = $joke_json ->content;

Результат в браузере по переходу по ссылке API, например:

{"content":"В поезде:
- Тот журнал, на котором вы сидите, вы случайно не читаете?"}

Но у меня в переменной $joke_content пустое значение. Как мне правильно занести ответ в переменную ?
и/или может я неправильно получаю ответ?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
Spartak-2205
@Spartak-2205
Разработка и создание сайтов
Поскольку сайт возвращает некорректный json, предлагаю такой вариант
$API = 'http://rzhunemogu.ru/RandJSON.aspx?CType=1';
$str = nl2br(mb_convert_encoding(file_get_contents($API), "UTF-8", "CP1251"));
$joke_content = str_replace(array('{"content":"', '"}', '\r', '\n'), "", $str);
echo $joke_content;
/*
- Мам, а у нашего папы есть Мерседес и вилла на Гавайях.
- Да откуда, у него же зарплата 10 тысяч рублей.
- Но папа сам сказал.
- Тебе сказал?
- Нет, девушке какой-то на улице.
*/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Для начала, вставляйте код в вопрос через кнопку "Вставить код". Например, сейчас у вас парсер съел http:// в ссылке.

Далее, этот дурацкий сайт возвращает невалидный JSON. Во-первых, он возвращает его в кодировке CP1251 (по стандарту должно быть UTF-8). Во-вторых, переносы строк, как и все контрольные символы, должны кодироваться.

Ну и вы поставили (вторым параметром при вызове json_decode) возвращать результат, как массив. А работать пытаетесь с ним, как с объектом.

$API = "http://rzhunemogu.ru/RandJSON.aspx?CType=1";
$s = iconv("cp1251", "utf-8", file_get_contents($API));
$s = str_replace(["\r", "\n"], ["\\r", "\\n"], $s);
$o = json_decode($s);
print $o->content;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы