尝试使用PHP获取JSON。出现在不同的阵型?

时间:2013-11-29 18:07:19

标签: php json

我正试图从另一个页面使用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;
?>

有没有办法让它像上面那样以正确的形式出现? 在这种情况下,任何答案都可以提供帮助。谢谢

3 个答案:

答案 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工作,而不是。