2010-01-26 3 views
3

Так что я вытаскиваю твитер-пар пользователя в формате JSON через PHP. Я хотел бы расшифровать его в ассоциативный массив или, по крайней мере, более удобный способ, а не строку, чтобы я мог маневрировать через нее.Декодирование JSON через PHP из Twitter не работает?

Я читал как сумасшедший о 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 
+0

Вы проверили, что '$ contents' это как? То есть содержимое '$ contents'? :) –

+0

'json_last_error()' возвращает 'JSON_ERROR_SYNTAX'. –

+0

Да, это длинная длинная строка. Я только что понял проблему, хотя! –

ответ

7

С callback в URL, вы получите тетиву, которая обернута в круглых скобках () (отрывок из строки):

([{"in_reply_to_user_id": /* ...more data here...*/ }]); 

Недействительный JSON.

Без callback, результат обернут только в [] который действует:

[{"in_reply_to_user_id": /* ...more data here...*/ }] 
+0

Итак, я предполагаю, что для javascript требуется обратный вызов из-за того, что он является клиентской стороной и ему нужен триггер, но в PHP file_get_contents() будет выполняться, а следующий шаг не будет, пока данные не будут прочитаны и сохранены. Просто пытаюсь выяснить, когда использовать обратный вызов, а когда нет. Как только я снял его, это сработало. Спасибо :) Проверено как правильно и проголосовано. –

3

Я был использован для разбора JSON с помощью библиотеки JQuery, так что я имел & обратного вызова =? в конце URL-адреса.

Кажется, что я снимаю это, что json_decode() не имеет проблем с преобразованием данных, а затем в массив.

Если кто-нибудь знает причину, почему это было бы, я хотел бы узнать.

Короче говоря, он работает !!

+0

См. Мой ответ по этой причине ... –

4

Ditch & callback =? в URL.

+0

Да, именно это я и сделал. Я понимаю обратные вызовы, но почему это все испортит? –

+1

Поскольку возвращаемая строка имела круглые скобки вокруг нее. Это просто недействительный json. В json нет необходимости/цели для них, поэтому они не включены в определение. Имейте в виду, что json не совсем то же самое, что javascript. – goat

3
$url = "http://twitter.com/status/user_timeline/" . $username . ".json?count=" . $count; 

удалить функцию обратного вызова, чтобы ваш JSON является JSON и не JSONP, JSONP разрывает на декодирование