Human Readable JSON:aka为json转储添加空格和中断

时间:2011-09-12 20:37:45

标签: php json var-dump

是否有一个“简单”的脚本,它会采用json数据并对其进行格式化以使其更具可读性?

例如:

// $response is a json encoded string.
var_dump($response);

以上输出一行。我希望它缩进和间隔以便于阅读。

7 个答案:

答案 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_encodePRETTY_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.netionic 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;
}