0

我正在制作一个需要从外部网站获取 JSON 数据的 WP7 应用程序。但是,出于多种原因,我不想直接通过应用程序解析 JSON,其中之一是返回的数据并不总是一致的。

为了解决这个问题,我想用我知道的语言(首选 JavaScript、PHP、RoR)编写自己的服务,以一致的格式返回这些数据。我希望能够向我的服务发送请求,而不是向原始 URL 发送请求,然后该服务将返回数据。

我不知道如何编写这样一个从原始源返回最新 JSON 的服务。信息会不断变化,因此我无法静态呈现页面并每天更新它。每次我的 WP7 应用程序的用户希望查看数据时,都必须轮询数据。

感谢您的任何指导。

DevZer0 的编辑:

  • echo $data只是打印Array
  • echo json_encode($data)给了我这个:

{ "stream": [ [ "</td>BeyondTheSummit</td>13751</td></tr>" ], [ "</td>WagamamaTV</td>2653</td></tr>" ], [ "</td>VeRsuta</td>1566</td></tr>" ], [ "</td>dubasTV</td>1128</td></tr>" ], [ "</td>followJotM</td>733</td></tr>" ], [ "</td>EternaLEnVyy</td>532</td></tr>" ], [ "</td>InozemeC</td>448</td></tr>" ], [ "</td>liquidkorok</td>295</td></tr>" ], [ "</td>DotaTalkStream</td>279</td></tr>" ], [ "</td>Sheever</td>260</td></tr>" ], [ "</td>Weppas</td>215</td></tr>" ], [ "</td>BeyondTheSummit2</td>93</td></tr>" ], [ "</td>dota2russia</td>56</td></tr>" ], [ "</td>PMSyanyan</td>54</td></tr>" ] ], "vod": [ [ "</span></td>GosuCup Asia VII: Zenith vs Dreamz /w ..</td>8</td></tr>" ], [ "</span></td>Dota 2 Dire Overlord Announcer Pack (W..</td>301</td></tr>" ], [ "</span></td>Dota 2 Purge plays Drow Ranger</td>9348</td></tr>" ], [ "</span></td>Typical Mistakes vs eL'Pride BigPoi..</td>1184</td></tr>" ], [ "</span></td>Team Empire vs Oslik Gaming BigPoin..</td>1162</td></tr>" ], [ "</span></td>Dota 2 Bottom 10 - Ep. 1 (Pilot - Reje..</td>73888</td></tr>" ], [ "</span></td>iCCup vs Next kz BigPoint Battle ..</td>631</td></tr>" ], [ "</span></td>eL'Pride vs RoX KIS BigPoint Battle..</td>712</td></tr>" ], [ "</span></td>Fnatic EU vs Artyk Gaming Game 1 Big..</td>2155</td></tr>" ], [ "</span></td>Fnatic EU vs Artyk Gaming Game 2 Big..</td>1668</td></tr>" ], [ "</span></td>Fnatic EU vs Lions Pride Bigpoint Ba..</td>988</td></tr>" ], [ "</span></td>Artyk Gaming vs iCCup Bigpoint Battl..</td>666</td></tr>" ], [ "</span></td>GosuCup Asia VII: Zenith vs Mineski</td>316</td></tr>" ], [ "</span></td>Orange eSports' 'Net' - Amazing Rubick..</td>5868</td></tr>" ], [ "</span></td>DotA2 - Outshine Vol.3</td>18672</td></tr>" ] ], "dota2vods": [ [ "2w ago</td>Orange vs </span>Rising Stars</td>BO3</td></tr>" ], [ "2w ago</td>KP vs </span>ICCup</td>BO1</td></tr>" ], [ "2w ago</td>KP vs </span>Mouz</td>BO1</td></tr>" ], [ "2w ago</td>Na'Vi vs </span>RoxKiS</td>BO1</td></tr>" ], [ "2w ago</td>Power Rangers vs </span>Alliance</td>BO1</td></tr>" ], [ "2w ago</td>LGD.INT vs </span>Orange</td>BO3</td></tr>" ], [ "2w ago</td>OsG vs </span>Alliance</td>BO1</td></tr>" ], [ "2w ago</td>zRage vs </span>KP</td>BO1</td></tr>" ], [ "2w ago</td>Empire vs </span>Quantic</td>BO1</td></tr>" ], [ "2w ago</td>Empire vs </span>TCM</td>BO1</td></tr>" ], [ "3w ago</td>Empire vs </span>KP</td>BO1</td></tr>" ], [ "3w ago</td>Quantic vs </span>TCM</td>BO1</td></tr>" ], [ "3w ago</td>Empire vs </span>RoxKiS</td>BO1</td></tr>" ], [ "3w ago</td>Mouz vs </span>ICCup</td>BO1</td></tr>" ], [ "3w ago</td>4FC vs </span>Mouz</td>BO1</td></tr>" ] ] }

如果我将此原始数据复制到 JSONLint 中,则表明 JSON 是有效的。但是,如果我输入我的 URL(“ http://blah.com/streams.php ”),它说它是无效的。我知道 JSONLint 可以使用 URL 进行验证,而不仅仅是原始数据。

这是我现在的完整 PHP 文件(streams.php):

<?php
header("Content-Type: application/json");
$url = "http://the-website-with-json";

$json = file_get_contents($url);
$data = json_decode($json, TRUE);

return json_encode($data);
?>
4

1 回答 1

1

你的包装类听起来像这样

 function wrapper($data) {
     $json = file_get_contents("http://.......");
     $obj = json_decode($json);

     //process your reconstruction consuming $obj

     return json_encode($obj); //or a new object that you transformed $obj 

 }

然后从您的主应用程序中,您可以调用

 $data = wrapper($data);
 $obj = json_decode($data);
于 2013-06-24T08:56:13.363 回答