Декодирование JSON-канала через PHP из Twitter не работает?
Вопрос
Итак, я удаляю твит пользователя steam в формате JSON с помощью PHP.Я бы хотел декодировать его в ассоциативный массив или, по крайней мере, каким-нибудь более удобным способом, а не в виде строки, чтобы я мог маневрировать по нему.
Я как сумасшедший читал о json_decode, но мне кажется, что когда я использую его до и после, содержимое файла все еще определяется как одна длинная строка.Кто-нибудь может помочь мне понять, что я делаю не так?
$url = "http://twitter.com/status/user_timeline/" . $username . ".json?count=" . $count . "&callback=?";
// $url becomes "http://twitter.com/status/user_timeline/steph_Rose.json?count=5&callback=?";
$contents = file_get_contents($url);
$results = json_decode($contents, true);
echo "<pre>";
print_r($results);
echo "</pre>";
echo gettype($results); // this returns string
Решение
С callback
в URL-адресе вы получаете обратно строку, заключенную в круглые скобки (
)
(отрывок из строки):
([{"in_reply_to_user_id": /* ...more data here...*/ }]);
Это недопустимый JSON.
Без callback
, результат завернут только в [
]
который является действительным:
[{"in_reply_to_user_id": /* ...more data here...*/ }]
Другие советы
Отказаться от &обратного вызова=?в URL-адресе.
Я привык разбирать JSON с помощью библиотеки jQuery, поэтому у меня был &обратный вызов=?в конце URL-адреса.
Кажется, как будто я снимаю это, что у json_decode() нет проблем с преобразованием данных в массив.
Если кто-нибудь знает причину, по которой это могло бы быть, я хотел бы знать.
Короче говоря, это работает!!
$url = "http://twitter.com/status/user_timeline/" . $username . ".json?count=" . $count;
удалите обратный вызов, чтобы ваш json был json, а не jsonp, jsonp прерывается при декодировании