【问题标题】:Return a JSON string on HTTP request在 HTTP 请求上返回 JSON 字符串
【发布时间】:2023-04-09 08:55:01
【问题描述】:

我正在制作一个需要从外部网站获取 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);
?>

【问题讨论】:

  • 为什么不创建从外部网站获取json数据的中间服务页面?您可以根据需要格式化 json。然后,您的 wp7 应用可以从中间服务页面请求数据。
  • 这正是我想要问的。为了澄清我的问题,如何处理来自 WP7 应用程序的 HTTP 请求?我的服务必须如何响应请求?
  • 我仍然不确定你想问什么。尽管如此,创建一个页面,example-webservice.php。复制 DevZer0 下面提到的代码,输出处理后的 json 数据。您的 wp7 应用程序可以简单地请求 webservice.php 并解析数据。
  • 请看我在 DevZer0 的回复中的最新评论。

标签: php javascript ruby-on-rails windows-phone-7


【解决方案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);

【讨论】:

  • 我熟悉 JSON 数据的编码/解码。那不是我的问题。我可以在 .php 文件(JSON 格式)中呈现这些数据,并在我的 WP7 应用程序中将其作为 JSON 数据使用吗? (与我的 PHP 脚本每秒以某种方式创建一个 .json 文件相反)
  • 好的,我们会尽力回复您。
  • 我尝试了您的建议,但在 JSONLint.com 验证时无法生成有效的 JSON 以下是我所拥有的:$json = file_get_contents("example.com"); $data = json_decode($json, TRUE); return json_encode($data); 我使用此代码测试您的方法,但 JSONLint 说结果是无效的。我也试过return $json,没有运气。
  • 您在发送输出时是否设置了header("Content-Type: application/json");
  • 我已经用我的 PHP 代码更新了我的帖子。即使按照您的建议设置了内容类型,错误仍然存​​在。
猜你喜欢
  • 2013-08-02
  • 1970-01-01
  • 2018-09-19
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多