我正试图从另一个页面使用PHP获取JSON数据,但它以一种奇怪的形式显示在一条线上并且在一条线上彼此相邻。
我尝试使用json_decode方法,但对我没用!但是我怎样才能让它显示在下面显示的正确形式中:
这就是我想要它出现的方式,它在主页面上显示:
{
"games": "pacman",
"level":"2",
"icon":"LINK HERE",
"topscorer":"3134000",
"nextlevel":"3",
"players":[ 21322,
43131,
84993,
8212,
501421,
7832126 ]
}
这就是我得到的:
{ "games": "pacman", "level":"2", "icon": "LINK HERE", "topscorer": "3134000", "nextlevel": "3", "players": [ 21322, 43171, 84993, 8222, 501421, 7832126 ] }
我的PHP代码:
<?php
$page = file_get_contents('WEBSITE-URL-HERE');
echo $page;
?>
有没有办法让它像上面那样以正确的形式出现? 在这种情况下,任何答案都可以提供帮助。谢谢
答案 0 :(得分:0)
我知道这有点粗糙,我还没有测试过,但它已经快速完成了
将其自身作为测试以查看输出
<?php
function prettifyJSON($json) {
static $i = 0;
if (is_bool($json)) return $json ? 'true' : 'false';
if (is_null($json)) return 'null';
if (is_numerical($json)) return $json;
if (is_string($json)) return '"'.$json.'"';
if (is_array($json)) {
$r = array();
foreach ($json as $v) $r[] = prettifyJSON($v);
return '['.implode(', ',$r).']';
}
if (is_object($json)) {
$r = array();
foreach ($json as $k => $v) $r[] = '"'.$k.'": '.prettifyJSON($v).PHP_EOL;
return '{'.PHP_EOL.implode(', ',$r).'}'.PHP_EOL;
}
}
ob_start();
echo 'this script is intended for testing purposes';
// assume this is a text file with parsed json in it
$page = file_get_contents('WEBSITE-URL-HERE');
// let's look at it raw
echo 'RAW OUTPUT: '.PHP_EOL;
var_dump($page);
echo 'FORMATTED OUTPUT: '.PHP_EOL;
echo prettifyJSON(json_decode($page));
echo PHP_EOL.'done formatting';
echo '<pre>'.ob_get_clean().'</pre>';
exit;
请提供一些反馈,我会根据您的需求进行更新
答案 1 :(得分:0)
第一种格式可能只是纯文本格式。第二个是浏览器渲染时的外观(浏览器不渲染换行符)。如果您希望它在第一个示例中看起来像,请将输出包装在<pre>
标记中:
<pre>
<?php echo file_get_contents('WEBSITE-URL-HERE'); ?>
</pre>
答案 2 :(得分:0)
我刚刚想到这绝对肯定是an X/Y Problem(你问的问题是基于你尝试的解决方案而不是原来的问题)。
从您告诉我们的实际问题可以总结如下:
我有一些用VB.NET编写的代码来获取JSON数据。当我从(未公开的源)获取数据时,它工作正常,但是当我从PHP获取它时,它失败了(以某种未指定的方式)。
然后你看了看差异,看到当你在浏览器中查看两个网址时,他们显示的格式不同,然后假设这是你的问题的原因。
要测试空白是否确实存在问题应该很容易:使用以下内容创建2个PHP文件,并在每个文件中指出VB.NET代码:
<强> test_1.php 强>
<?php
echo '{
"games": "pacman",
"level":"2",
"icon":"LINK HERE",
"topscorer":"3134000",
"nextlevel":"3",
"players":[ 21322,
43131,
84993,
8212,
501421,
7832126 ]
}';
<强> test_2.php 强>
<?php
echo '{ "games": "pacman", "level":"2", "icon": "LINK HERE", "topscorer": "3134000", "nextlevel": "3", "players": [ 21322, 43171, 84993, 8222, 501421, 7832126 ] }';
如果test_1.php有效,但test_2.php没有,那么空白确实是你的问题。但是,由于都应该是有效的JSON,因此您的问题必须在于您的VB.NET代码 - 所以您不必担心为什么两者看起来不同。
如果 - 我强烈怀疑 - 两个测试都失败了,那么你需要寻找其他一些问题。最有可能的两个是 HTTP标头和网址访问/安全性。
HTTP标头由Web服务器与内容一起发送,并告诉浏览器 - 或者,在这种情况下,您的VB.NET代码 - 如何处理该内容。最有可能与此相关的是Content-Type
标题。默认情况下,PHP会将其生成的任何内容宣传为text/html
,这不是您想要的。 JSON数据的官方内容类型为application/json
,您可以告诉PHP使用the header()
function设置适当的标头,如下所示:
<?php
header('Content-Type: application/json');
echo '{ "games": "pacman", "level":"2", "icon": "LINK HERE", "topscorer": "3134000", "nextlevel": "3", "players": [ 21322, 43171, 84993, 8222, 501421, 7832126 ] }';
另一个可能的问题是访问URL本身:您可以在浏览器中访问您的PHP页面,但您的VB.NET代码可能不会。您可能已将PHP脚本放在从Internet的其余部分看不到的服务器上,因为它位于您的网络本地或防火墙后面。或者,可能存在安全限制,可以通过VB.NET代码加载哪些URL,或者阻止运行该代码的服务器的防火墙。
在不知道VB.NET代码如何工作的情况下进行测试比较棘手,但如果您只是在VB.NET中获取URL的内容而不试图以任何方式处理它,那么您可以找出哪些URL工作,而不是。