2011-07-15 18 views
4

PHPのjson_decode関数を使用して、jsonオブジェクトから特定の値を取得しようとしています。以下 サンプルコード:PHP json_decodeが正しく動作しません

foreach ($streams as &$i) { 
     $chan = "http://api.justin.tv/api/stream/list.json?channel=" . $i; 
     $json = file_get_contents($chan); //Turns the gathered file information into a string for searching purposes. 
     echo $json . " End of json variable.<br>"; 
     $exist = strpos($json, 'name');  // Search the file/json object for the name attribute 
     if($exist) {      // Check to see if a name existed and if so add it to the live streams and get the image. 
      echo " <a href=\"http://justin.tv/" . $i . "\">" . $i . "</a> <br>"; 
      $liveStreams[$count] = $i; 
      $json_information = json_decode($json,true); 
      $image[$count] = $json_information[0]['channel']['image_url_large']; 
      echo "Image link should appear: " . $image[count]; 
      $count++; 
     } 
    } 

だから私はこれを行うにしようとしていますどのような最初のものであると何よりも以前のコードで提供されたリストから、アクティブであるストリームを収集します。次に、ストリームがライブであれば、それを見るためのページへのリンクを表示します(現在はjustin.tvストリーム自体)。現在動作しているのは、ライブストリームのみにリンクが表示されることです。私が必要とするのは、デコード後にimage_url_large変数にアクセスできない理由を理解することです。これは最終的にストリームのサムネイル表示になります。私はnickfの答えのようにそれをやってみました

json decode in php

、それはまだ動作していない:

私が働いているはずです何のためにも、私は次のスレッドを見たstackoverflowの上のさまざまな場所で見てきました。任意のヘルプは、オブジェクトに入るのではなく、配列スタイル内にとどまるだけでなく、非常に高く評価されます。

+0

var_dump($ json_information) - 何を得るのですか? – sagi

+0

'if($ exist!== FALSE)'でなければなりません。 strposは、探しているものが文字列の先頭にある場合は0を返すことができます。そうでなければfalseと解釈されます。 –

+0

私は他の人と仕事をしています。彼は存在のためのコードを私に与えたもので、これは彼がそれをやりたがっている。コードのサンプルが返されるようにするには、次のように入力します。 http://api.justin.tv/api/stream/list.json?channel=beastyqt 名前はAPIに基づいて決して最初ではありません。問題。 –

答えて

5

strpos()の愚かな使用以外に、あなたが他人のアイデアであったと思われるように、慎重にデバッグする必要があるようです。

$data = json_decode($json,true); 
echo "<PRE>"; 
var_dump($data); die(); 

今、あなたはAPIがあなたを与えているデータ構造を見ることができます:

はこのような何かを行います。

配列の構造を見てください。たとえば、$data['image_url_large']が存在しないことに注意してください。しかし、$data[0]['channel']['image_url_large']があります!

注意してくださいまた、その代わりに、文字列「名前」は、あなたが何か行うことができますJSON文字列のどこにでも存在する場合は偽陽性を与える愚かなstrpos()呼び出し、の:

$exists = ! empty($data[0]['name']); 

EDITをここは、うまくいけばあなたの方法であなたを助けるいくつかのコードです:

<?php 
//if you don't do this, you're flying blind. 
ini_set('display_errors',1); 
error_reporting(E_ALL); 

//list.json is a copy of the data from the URL you posted. 
$json = file_get_contents('./list.json'); 

//decode the data 
$data = json_decode($json,true); 

//uncomment this if you're not sure of what the json's structure is. 
#echo "<PRE>";var_dump($data);die(); 

//check for the existence of a "name" key in the first item. 
$exist = ! empty($data[0]['name']); 

echo "Exist?:"; 

if ($exist) { 
    echo " yes\n"; 
}else{ 
    echo " no\n"; 
} 

//output the image url: 
echo $data[0]['channel']['image_url_large']; 

//say goodbye 
die("\n\nAll done.\n"); 

はOUTPUT:

$ php test.php 
Exist?: yes 
http://static-cdn.jtvnw.net/jtv_user_pictures/beastyqt-profile_image-c5b72ccf47b74ed2-300x300.jpeg 

All done. 
2

var_dump()を使用して、返されたjsonオブジェクトを調べます。あなたの例から、あなたは次のようなものが必要なようです:

$json_information[0]['channel']['image_url_large'] 
+0

私はあなたが示唆したように変更を加えましたが、うまくいきませんでした。私はこれを反映するためにオリジナルのコードを更新しました。 –

+0

あなたのコードでは '$ image [count]'はどうでしょうか?そこにタイプミスがありますか? – timdev

+0

真剣に、私の答えを見て、あなた自身のためにデバッグを開始する必要があります。私の答えを見て、始める方法についての提案をしてください。これはロケット手術ではありませんが、あなたが思考してデバッグするのは怖いようです。 – timdev

関連する問題