Skip to content

Instantly share code, notes, and snippets.

@pmcalabrese
Created February 19, 2014 11:51
Show Gist options
  • Save pmcalabrese/9090469 to your computer and use it in GitHub Desktop.
Save pmcalabrese/9090469 to your computer and use it in GitHub Desktop.
<?php
/**
* Formats a JSON string for pretty printing
*
* @param string $json The JSON to make pretty
* @param bool $html Insert nonbreaking spaces and <br />s for tabs and linebreaks
* @return string The prettified output
* @author Jay Roberts
*/
function _format_json($json, $html = false) {
$tabcount = 0;
$result = '';
$inquote = false;
$ignorenext = false;
if ($html) {
$tab = "&nbsp;&nbsp;&nbsp;";
$newline = "<br/>";
} else {
$tab = "\t";
$newline = "\n";
}
for($i = 0; $i < strlen($json); $i++) {
$char = $json[$i];
if ($ignorenext) {
$result .= $char;
$ignorenext = false;
} else {
switch($char) {
case '{':
$tabcount++;
$result .= $char . $newline . str_repeat($tab, $tabcount);
break;
case '}':
$tabcount--;
$result = trim($result) . $newline . str_repeat($tab, $tabcount) . $char;
break;
case ',':
$result .= $char . $newline . str_repeat($tab, $tabcount);
break;
case '"':
$inquote = !$inquote;
$result .= $char;
break;
case '\\':
if ($inquote) $ignorenext = true;
$result .= $char;
break;
default:
$result .= $char;
}
}
}
return $result;
}
@pmcalabrese
Copy link
Author

"; } else { $tab = ($tabspaces == null ? "\t" : str_repeat(" ", $tabspaces)); $newline = "\n"; } for($i = 0; $i < strlen($json); $i++) { $char = $json[$i]; if ($ignorenext) { $result .= $char; $ignorenext = false; } else { switch($char) { case ':': $result .= $char . (!$inquote ? " " : ""); break; case '{': if (!$inquote) { $tabcount++; $result .= $char . $newline . str_repeat($tab, $tabcount); } else { $result .= $char; } break; case '}': if (!$inquote) { $tabcount--; $result = trim($result) . $newline . str_repeat($tab, $tabcount) . $char; } else { $result .= $char; } break; case ',': if (!$inquote) { $result .= $char . $newline . str_repeat($tab, $tabcount); } else { $result .= $char; } break; case '"': $inquote = !$inquote; $result .= $char; break; case '\\': if ($inquote) $ignorenext = true; $result .= $char; break; default: $result .= $char; } } } return $result; } ``` ?>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment