PHP json字符串,格式化缩进显示

PHP json字符串,格式化显示

/**
 * 格式化
 */
class JsonFormatHelper
{
	/**
	 * json字符串缩进显示
	 * @param unknown $json
	 * @return string
	 */
	public static function jsonIndentShow($jsonStr)
	{
		echo self::jsonIndentFormat($jsonStr);
	}

	/**
	 * json字符串缩进
	 * @param unknown $json
	 * @return string
	 */
	public static function jsonIndentFormat($jsonStr)
	{
		$result = '';
		$indentCount = 0;
		$strLen = strlen($jsonStr);
		$indentStr = '    ';
		$newLine = "\r\n";
		$isInQuotes = false;
		$prevChar = '';
		for($i = 0; $i <= $strLen; $i++) {
			$char = substr($jsonStr, $i, 1);
			
			if($isInQuotes){
				$result .= $char;
				if(($char=='"' && $prevChar!='\\')){
					$isInQuotes = false;
				}
			}
			else{
				if(($char=='"' && $prevChar!='\\')){
					$isInQuotes = true;
					if ($prevChar != ':'){
						$result .= $newLine;
						for($j = 0; $j < $indentCount; $j++) {
							$result .= $indentStr;
						}
					}
					$result .= $char;
				}
				elseif(($char=='{' || $char=='[')){
					if ($prevChar != ':'){
						$result .= $newLine;
						for($j = 0; $j < $indentCount; $j++) {
							$result .= $indentStr;
						}
					}
					$result .= $char;
					$indentCount = $indentCount + 1;
				}
				elseif(($char=='}' || $char==']')){
					$indentCount = $indentCount - 1;
					$result .= $newLine;
					for($j = 0; $j < $indentCount; $j++) {
						$result .= $indentStr;
					}
					$result .= $char;
				}
				else{
					$result .= $char;
				}
			}
			$prevChar = $char;
		}
		return $result;
	}
}

 

posted on 2016-12-22 11:05  周~~  阅读(581)  评论(0编辑  收藏  举报

导航