2010-01-26 11 views
3

Je suis donc en train d'extraire le tweet d'un utilisateur au format JSON via PHP. Je voudrais le décoder en un tableau associatif ou au moins un mode plus utilisable plutôt qu'une chaîne pour que je puisse le manœuvrer. J'ai lu le code json_decode, mais pour moi, il semble que lorsque je l'utilise, avant et après, le contenu du fichier est toujours détecté comme une longue chaîne. Quelqu'un peut-il m'aider à comprendre ce que je fais mal?Décoder le flux JSON via PHP depuis Twitter ne fonctionne pas?

$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

Avez-vous vérifié ce 'contents' de $ est comme? C'est à dire. le contenu de '$ contents'? :) –

+0

'json_last_error()' retourne 'JSON_ERROR_SYNTAX'. –

+0

Oui, c'est une longue longue chaîne. J'ai juste compris le problème, cependant! –

Répondre

7

Avec callback dans l'URL, vous obtenez une chaîne de retour qui est enveloppé entre parenthèses () (extrait de la chaîne):

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

Ce JSON n'est pas valide.

Sans callback, le résultat est seulement enveloppé dans [] qui est valide:

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

Donc, je suppose qu'un rappel est requis pour javascript car il est du côté client et nécessite un déclencheur, mais en PHP, file_get_contents() s'exécutera et l'étape suivante ne le sera pas tant que les données n'auront pas été lues et stockées. Juste essayer de comprendre quand utiliser le rappel et quand ne pas le faire. Dès que je l'ai enlevé, ça a marché. Merci :) Vérifié comme correct et voté. –

3

j'utilisé pour l'analyse JSON en utilisant la bibliothèque jQuery, donc je devais le rappel & =? à la fin de l'URL.

Il semble que je supprime ceci, que json_decode() n'a aucun problème à convertir les données, alors, en un tableau.

Si quelqu'un connaît la raison pour laquelle ce serait, j'aimerais savoir.

Longue histoire courte, ça marche !!

+0

Voir ma réponse pour la raison ... –

4

Ditch le & callback =? dans l'url.

+0

Oui, c'est exactement ce que j'ai fini par faire. Je comprends les rappels, mais pourquoi cela gâcherait-il ça? –

+1

Parce que la chaîne renvoyée avait des parenthèses autour d'elle. C'est simplement, json invalide. Il n'y a aucun besoin/but pour eux dans json, donc ils ne sont pas inclus dans la définition. Gardez à l'esprit, json n'est pas exactement le même que javascript. – goat

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

supprimer le rappel afin que votre JSON est JSON et non jsonp, jsonp casse le décodage