/**
* 格式化输出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 "\t": case "\n": case "\r":
$char = "";
$ends_line_level = $new_line_level;
$new_line_level = NULL;
break;
}
}
if( $new_line_level !== NULL ) {
$result .= "\n".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 = "\n";
$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>';