是否有一个“简单”的脚本,它会采用json数据并对其进行格式化以使其更具可读性?
例如:
// $response is a json encoded string.
var_dump($response);
以上输出一行。我希望它缩进和间隔以便于阅读。
答案 0 :(得分:21)
请注意,var_dump
及其表兄var_export
执行打印换行符。
请记住,默认情况下,HTML文档中不会显示换行符。在HTML上下文中,您需要这样:
echo '<div style="font-family: monospace; white-space:pre;">';
echo htmlspecialchars(var_export($response));
echo '</div>';
在php 5.4+中,您只需使用json_encode的PRETTY_PRINT
标记:
echo json_encode($response, JSON_PRETTY_PRINT);
同样,在HTML上下文中,您必须按照上述描述进行包装。
答案 1 :(得分:12)
将其粘贴到JSONLint.com并点击验证。
答案 2 :(得分:12)
有一个类似的问题,因为我将一个序列化的javascript对象发布到php脚本,并希望以人类可读的格式将其保存到服务器。
找到this post on the webdeveloper.com forum并稍微调整代码以适应我自己的感受(它需要一个json编码的字符串):
function jsonToReadable($json){
$tc = 0; //tab count
$r = ''; //result
$q = false; //quotes
$t = "\t"; //tab
$nl = "\n"; //new line
for($i=0;$i<strlen($json);$i++){
$c = $json[$i];
if($c=='"' && $json[$i-1]!='\\') $q = !$q;
if($q){
$r .= $c;
continue;
}
switch($c){
case '{':
case '[':
$r .= $c . $nl . str_repeat($t, ++$tc);
break;
case '}':
case ']':
$r .= $nl . str_repeat($t, --$tc) . $c;
break;
case ',':
$r .= $c;
if($json[$i+1]!='{' && $json[$i+1]!='[') $r .= $nl . str_repeat($t, $tc);
break;
case ':':
$r .= $c . ' ';
break;
default:
$r .= $c;
}
}
return $r;
}
传入
{"object":{"array":["one","two"],"sub-object":{"one":"string","two":2}}}
返回
{
"object": {
"array": [
"one",
"two"
],
"sub-object": {
"one": "string",
"two": 2
}
}
}
答案 3 :(得分:4)
ionic run android --release
这是2017年,我认为这应该是现代版PHP的任何人的答案。
请注意,对于如何根据自己的喜好对JSON字符串进行编码,存在许多选项。来自php.net:
ionic run android
答案 4 :(得分:2)
echo '<pre>';
print_r(json_decode($response));
echo '</pre>';
太简单了?
答案 5 :(得分:0)
通过python -mjson.tool
管道。
答案 6 :(得分:0)
使用python的建议对我来说效果很好。以下是PHP中使用此代码的一些代码:
function jsonEncode( $data, $pretty = false ) {
$str = json_encode($data);
if( $pretty ) {
$descriptorSpec = array(
0 => array('pipe', 'r'), // stdin is a pipe that the child will read from
1 => array('pipe', 'w'), // stdout is a pipe that the child will write to
);
$fp = proc_open('/usr/bin/python -mjson.tool', $descriptorSpec, $pipes);
fputs($pipes[0], $str);
fclose($pipes[0]);
$str = '';
while( !feof($pipes[1]) ) {
$str .= $chunk = fgets($pipes[1], 1024);
}
fclose($pipes[1]);
}
return $str;
}