牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP格式化输出json数据

创建时间:2014-09-23 投稿人: 浏览次数:2460
/**
 * 格式化输出json数据
 * @param  $json 待输出数据
 * @return json格式化后的数据
 */
function prettyPrint( $json )
{
    $result = "";
    $level = 0;
    $prev_char = "";
    $in_quotes = false;
    $ends_line_level = NULL;
    $json_length = strlen( $json );

    for( $i = 0; $i < $json_length; $i++ ) {
        $char = $json[$i];
        $new_line_level = NULL;
        $post = "";
        if( $ends_line_level !== NULL ) {
            $new_line_level = $ends_line_level;
            $ends_line_level = NULL;
        }
        if( $char === """ && $prev_char != "\" ) {
            $in_quotes = !$in_quotes;
        } else if( ! $in_quotes ) {
            switch( $char ) {
                case "}": case "]":
                    $level--;
                    $ends_line_level = NULL;
                    $new_line_level = $level;
                    break;

                case "{": case "[":
                    $level++;
                case ",":
                    $ends_line_level = $level;
                    break;

                case ":":
                    $post = " ";
                    break;

                case " ": case "	": case "
": case "
":
                    $char = "";
                    $ends_line_level = $new_line_level;
                    $new_line_level = NULL;
                    break;
            }
        }
        if( $new_line_level !== NULL ) {
            $result .= "
".str_repeat( "    ", $new_line_level );
        }
        $result .= $char.$post;
        $prev_char = $char;
    }

    return $result;
}


/**
 * 格式化输出json数据
 * @param  $json 待输出数据
 * @return json格式化后的数据
 */
function indent ($json) { 

    $result = ""; 
    $pos = 0; 
    $strLen = strlen($json); 
    $indentStr = " "; 
    $newLine = "
"; 
    $prevChar = ""; 
    $outOfQuotes = true; 

    for ($i=0; $i<=$strLen; $i++) { 

        // Grab the next character in the string. 
        $char = substr($json, $i, 1); 
        // Are we inside a quoted string? 
        if ($char == """ && $prevChar != "\") { 
            $outOfQuotes = !$outOfQuotes; 
            // If this character is the end of an element, 
            // output a new line and indent the next line. 
        } else if(($char == "}" || $char == "]") && $outOfQuotes) { 
            $result .= $newLine; 
            $pos --; 
            for ($j=0; $j<$pos; $j++) { 
                $result .= $indentStr; 
            } 
        } 
        // Add the character to the result string. 
        $result .= $char; 
        // If the last character was the beginning of an element, 
        // output a new line and indent the next line. 
        if (($char == "," || $char == "{" || $char == "[") && $outOfQuotes) { 
            $result .= $newLine; 
            if ($char == "{" || $char == "[") { 
                $pos ++; 
            } 
            for ($j = 0; $j < $pos; $j++) { 
                $result .= $indentStr; 
            } 
        } 
        $prevChar = $char; 
    } 

    return $result; 
}


测试:


$a = "{"_ad_url": ","_aid": 0,"_effective": 0,"_focus_desc": ","_focus_pic": ","_focus_title": ","_icourl": ","_tv_id": 0,"_type": 0,"aid": 215114700,"focus_desc": ","focus_pic": "http://pic4.qiyipic.com/common/20131210/9d4c967e06fc4fb5af2d93ba1763c8ee.jpg","focus_title": "光的棍","icourl": "http://pic7.qiyipic.com/common/20131210/e1bdd19da1ff45ca8f32a71fd8a870d7.jpg","open_type": 0,"source": ","topic_list": [],"tv_id": 0,"type": 0}";
echo "<pre>";
echo indent($a);
echo prettyPrint($a);
echo "</pre>";


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。