您可能会说这是这个问题的重复,但原始问题在那里没有得到解答。问题的重要部分是:是否有编程方式来美化json?
是否有任何php函数可以实现?原生或自制?
json_encode() 函数有一个标志 JSON_PRETTY_PRINT
echo json_encode($data, JSON_PRETTY_PRINT);
/**
* JSON beautifier
*
* @param string The original JSON string
* @param string Return string
* @param string Tab string
* @return string
*/
function pretty_json($json, $ret= "\n", $ind="\t") {
$beauty_json = '';
$quote_state = FALSE;
$level = 0;
$json_length = strlen($json);
for ($i = 0; $i < $json_length; $i++)
{
$pre = '';
$suf = '';
switch ($json[$i])
{
case '"':
$quote_state = !$quote_state;
break;
case '[':
$level++;
break;
case ']':
$level--;
$pre = $ret;
$pre .= str_repeat($ind, $level);
break;
case '{':
if ($i - 1 >= 0 && $json[$i - 1] != ',')
{
$pre = $ret;
$pre .= str_repeat($ind, $level);
}
$level++;
$suf = $ret;
$suf .= str_repeat($ind, $level);
break;
case ':':
$suf = ' ';
break;
case ',':
if (!$quote_state)
{
$suf = $ret;
$suf .= str_repeat($ind, $level);
}
break;
case '}':
$level--;
case ']':
$pre = $ret;
$pre .= str_repeat($ind, $level);
break;
}
$beauty_json .= $pre.$json[$i].$suf;
}
return $beauty_json;
}
quote_state
,否则时间戳将会损坏... - flederwiesel我刚刚也有同样的问题。但是,就像你一样,我的php版本低于5.4。Zend框架有Zend_Json::prettyPrint()函数。它非常好用。
这个简单的技巧对我很有用,我不想使用任何额外的库或函数:
$json = '{"status":"0","status_translated":"Request successful!","data":"1"}';
$json_beautified = str_replace(array("{", "}", '","'), array("{<br /> ", "<br />}", '",<br /> "'), $json);
结果如下所示:
{
"status":"0",
"status_translated":"Request successful!",
"data":"1"
}
这仅适用于只有1个步骤深度的JSON代码,希望对您有所帮助。
json_decode
后跟var_dump
的输出缓冲可能可行,但不是最干净的解决方案。 - Michael Mior