我正在构建一个PHP脚本,将JSON数据提供给另一个脚本。我的脚本将数据构建到一个大型关联数组中,然后使用json_encode输出数据。下面是一个脚本示例:

$data = array('a' => 'apple', 'b' => 'banana', 'c' => 'catnip');
header('Content-type: text/javascript');
echo json_encode($data);

上面的代码产生如下输出:

{"a":"apple","b":"banana","c":"catnip"}

如果你有少量的数据,这是很好的,但我更喜欢这样的东西:

{
    "a": "apple",
    "b": "banana",
    "c": "catnip"
}

有没有办法在PHP中做到这一点,而不需要丑陋的黑客?似乎Facebook的某个人发现了这一点。


当前回答

许多用户建议您使用

echo json_encode($results, JSON_PRETTY_PRINT);

这完全正确。但这还不够,浏览器需要了解数据的类型,您可以在将数据回显给用户之前指定头部。

header('Content-Type: application/json');

这将产生格式良好的输出。

或者,如果你喜欢扩展,你可以使用JSONView Chrome。

其他回答

如果你正在使用MVC

尝试在您的控制器中执行此操作

public function getLatestUsers() {
    header('Content-Type: application/json');
    echo $this->model->getLatestUsers(); // this returns json_encode($somedata, JSON_PRETTY_PRINT)
}

然后如果你调用/getLatestUsers,你会得到一个漂亮的JSON输出;)

以下是对我有效的方法:

test.php的内容:

<html>
<body>
Testing JSON array output
  <pre>
  <?php
  $data = array('a'=>'apple', 'b'=>'banana', 'c'=>'catnip');
  // encode in json format 
  $data = json_encode($data);

  // json as single line
  echo "</br>Json as single line </br>";
  echo $data;
  // json as an array, formatted nicely
  echo "</br>Json as multiline array </br>";
  print_r(json_decode($data, true));
  ?>
  </pre>
</body>
</html>

输出:

Testing JSON array output


Json as single line 
{"a":"apple","b":"banana","c":"catnip"}
Json as multiline array 
Array
(
    [a] => apple
    [b] => banana
    [c] => catnip
)

还要注意html中“pre”标签的使用。

希望这能帮助到别人

你可以这样做。

$array = array(
   "a" => "apple",
   "b" => "banana",
   "c" => "catnip"
);

foreach ($array as $a_key => $a_val) {
   $json .= "\"{$a_key}\" : \"{$a_val}\",\n";
}

header('Content-Type: application/json');
echo "{\n"  .rtrim($json, ",\n") . "\n}";

上面的输出有点像Facebook。

{
"a" : "apple",
"b" : "banana",
"c" : "catnip"
}

我通常会用这些简单的语句。

如果你已经有一个JSON字符串,你可以简单地使用echo()和print_r()的组合。 不要忘记将print_r()的第二个参数传递给true,以便它返回值而不是打印它:

echo('<pre>' . print_r($json, true) . '</pre>');

或者你可以使用die(),这对调试很方便:

die('<pre>' . print_r($json, true) . '</pre>');

如果您有一个数组,您需要在之前将其转换为JSON字符串。 请确保使用JSON_PRETTY_PRINT标志设置json_encode()的第二个参数,这样您的JSON将被正确呈现:

echo('<pre>' . print_r(json_encode($array, JSON_PRETTY_PRINT), true) . '</pre>');

或者用于调试:

die('<pre>' . print_r(json_encode($array, JSON_PRETTY_PRINT), true) . '</pre>');

我用过这个:

echo "<pre>".json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)."</pre>";

或者像下面这样使用php头文件:

header('Content-type: application/json; charset=UTF-8');
echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);