2017-07-17 75 views
0

我要显示与标题,流派,体裁,说明电视节目的列表,使用服务器上的一个JSON文件开始时间和持续时间,但我得到以下错误(非对象):遍历JSON

E_NOTICE:式8 - 尝试获取非对象的属性 - 在第13行

E_WARNING:类型2 - 为的foreach()提供参数无效 - 在第13行

这里是一块样品json:

{"channel":"6280", 
"banned":true, 
"plan":[ 
{"id":"-1", 
"pid":"0", 
"starttime":"00:00", 
"dur":"65", 
"title":"", 
"normalizedtitle": "", 
"desc":"", 
"genre":"", 
"subgenre":"", 
"prima":false 
}, 


{"id":"94622386", 
"pid":"507461", 
"starttime":"01:05", 
"dur":"65", 
"title":"Sex Researchers", 
"normalizedtitle": "sex-researchers", 
"desc":"Ep. 2 - Ciclo The Body of...", 
"genre":"mondo e tendenze", 
"subgenre":"societa", 
"prima":false 
}, 

这里是我使用的PHP代码:

<?php 
$channel = '6280'; 
$current_unix = time(); 

$json = json_decode(file_get_contents('http://guidatv.sky.it/app/guidatv/contenuti/data/grid/'.date('y_m_d').'/ch_'.$channel.'.js')); 
//print_r($json); 

echo '<ul>'; 

foreach ($json as $data) { 

echo '<li>'; 
foreach ($data->plan as $prog) { 

if ($current_unix < $prog->starttime) { 

echo $prog->id . '<br>'; 
echo $prog->starttime . '<br>'; 
echo $prog->dur . '<br>'; 
echo $prog->desc . '<br>'; 
if (isset($prog->genre)) { 
echo $prog->genre . '<br>'; 
} 
} 
} 
echo '</li>'; 
} 
echo '</ul>'; 
?> 

你能帮我解决这个问题呢?谢谢

+0

这是一个完整的JSON样本?因为你给定的JSON是无效的。 – invisal

+0

嗨,在这里你可以找到完整的JSON:http://guidatv.sky.it/app/guidatv/contenuti/data/grid/17_04_22/ch_6280.js – fredix11

回答

0

你不能循环对象。你的JSON不返回通道数组,但只返回一个通道对象。这是你想要的:

$json = json_decode(file_get_contents('http://guidatv.sky.it/app/guidatv/contenuti/data/grid/'.date('y_m_d').'/ch_'.$channel.'.js')); 

echo '<ul>'; 
foreach ($json->plan as $prog) { 
    echo "<li>" . $prog->title . '</li>'; 
} 
echo '</ul>'; 
+0

如何显示给定的JSON电视节目的名单? – fredix11

+0

@ fredix11,更新了答案。你可以检查。 – invisal