src/JsonPrettyPrinter.php
<?php
namespace Thru\JsonPrettyPrinter;
class JsonPrettyPrinter
{
public static function json($json)
{
if (is_object($json) || is_array($json)) {
$json = json_encode($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;
} elseif (!$in_quotes) {
switch ($char) {
case '}':
case ']':
$level--;
$ends_line_level = null;
$new_line_level = $level;
break;
case '{':
case '[':
$level++;
$ends_line_level = $level;
break;
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("\t", $new_line_level);
}
$result .= $char . $post;
$prev_char = $char;
}
return $result;
}
}