json-decode两个feed源

时间:2014-12-31 21:42:17

标签: php json

我尝试解码两个不同的json feed网址并合并为一个oject / output。我尝试了以下,然而,并没有真正的运气。

feed source 1: http://sourcesample.com/feed/posts
data: [
{
name: "Me",
url: "http://example.com/sample",
title: "Sample Title",
}
]
feed source 2: http://differentsource.com/feed/details
data: [
{
 likes: "200",
 shares: "300",
 total: "1000",
}
]

$sources =array("http://sourcesample.com/feed/posts", "http://differentsource.com/feed/details");
$requests = file_get_contents($sources[0],$sources[1]);
$response = json_decode($requests);
foreach($response->data as $item){
echo'<li>'.$item->name.'</li><li>'.$item->shares.'</li>'

打印名称有效,但在尝试打印第二个对象Feed时,没有任何内容。有任何想法吗?

1 个答案:

答案 0 :(得分:2)

file_get_contents()一次不会返回多个网址的内容。对于true参数,第二个参数大致被视为use_include_path。为了您的目的,这是无关紧要的。

无论如何,只读取第一个Feed。它不包括“份额”数据。

即使读取,结果也是:

'data: [
  {
    name: "Me",
    url: "http://example.com/sample",
    title: "Sample Title",
  }
]
data: [
  {
    likes: "200",
    shares: "300",
    total: "1000",
  }
]'

这不是一个有效的JSON字符串 - 它是彼此相邻的两个对象,没有合并。

如果您确信两个Feed的大小相同,则可以同时读取它们(单独),然后立即循环播放它们:

$names = json_decode( file_get_contents( $sources[0] ) );
$stats = json_decode( file_get_contents( $sources[1] ) );

for ( $i = 0; $i < count( $names->data ); ++$i )
{
  $name = $names->data[$i];
  $stat = $stats->data[$i];

  echo '<li>' . htmlspecialchars($name->name) . '</li><li>' . 
       htmlspecialchars($stat->shares) . '</li>';
}