php 如何以编程方式美化JSON?[关闭]

prdp8dxp  于 5个月前  发布在  PHP
关注(0)|答案(5)|浏览(74)

**已关闭。**此问题正在寻求有关书籍、工具、软件库等内容的建议。它不符合Stack Overflow guidelines。当前不接受答案。

我们不允许提出问题来寻求对图书、工具、软件库等的推荐。您可以编辑问题,以便用事实和引文来回答。
8年前就关门了。
Improve this question
你可能会说这是this question的副本,但原来的问题没有得到回答。问题的重要部分是:programmatically
是否有php函数?本地或自制的?

50pmv0ei

50pmv0ei1#

json_encode()具有标志JSON_PRETTY_PRINT

echo json_encode($data, JSON_PRETTY_PRINT);

字符串
要提高输出的可读性,可以添加JSON_UNESCAPED_UNICODEJSON_UNESCAPED_SLASHES等标志

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

lf3rwulv

lf3rwulv2#

我现在也有同样的问题。但正如你也一样,我有php < 5.4。Zend框架有Zend_Json::prettyPrint()。工作得很好。

zsbz8rwp

zsbz8rwp3#

我创建了一个非破坏性的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;

}

字符串

flseospp

flseospp4#

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

$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"
}


这只是针对深入一步的json代码,我希望它能有所帮助。

tktrz96b

tktrz96b5#

对于命令行的使用,你可以使用js美化器。不需要与外部网站共享你的数据。
https://github.com/vivekpathak/tools/blob/master/jb/jb

相关问题