如何以编程方式美化JSON?

时间:2011-07-12 23:59:27

标签: php json

您可能会说这与this question重复,但原始问题在那里没有回答。问题的重要部分是:programmatically

有没有php功能?原生还是自制?

6 个答案:

答案 0 :(得分:94)

json_encode()有一个标记JSON_PRETTY_PRINT

echo json_encode($data, JSON_PRETTY_PRINT);

答案 1 :(得分:14)

看起来这可能有效:

http://recursive-design.com/blog/2008/03/11/format-json-with-php/

genesis的结果:

[[["er",null,null,null,null,500],["e",2,null,null,57]],'45932b7d6d6dc08e']

[
  [
    [
      "er",
      null,
      null,
      null,
      null,
      500
    ],
    [
      "e",
      2,
      null,
      null,
      57
    ]
  ],
  '45932b7d6d6dc08e'
] 

答案 2 :(得分:3)

现在有同样的问题。但是你也在使用php< 5.4。 Zend Framework有Zend_Json :: prettyPrint()。效果很好。

答案 3 :(得分:2)

这个简单的技巧为我完成了工作,我不想要任何额外的库或函数:

$json = '{"status":"0","status_translated":"Request successful!","data":"1"}';
$json_beautified = str_replace(array("{", "}", '","'), array("{<br />&nbsp;&nbsp;&nbsp;&nbsp;", "<br />}", '",<br />&nbsp;&nbsp;&nbsp;&nbsp;"'), $json);

结果如下:

{
    "status":"0",
    "status_translated":"Request successful!",
    "data":"1"
}

这仅适用于深度为1步的json代码,我希望它有所帮助。

答案 4 :(得分:2)

我创建了一个非破坏性的JSON美化器,支持多个深层次。

/**
 * 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;

}   

答案 5 :(得分:-1)

对于命令行用法,您可以使用js beautifier。无需与外部网站共享您的数据。

https://github.com/vivekpathak/tools/blob/master/jb/jb