Pretty-print JSON from any URL PHP's file_get_contents can reach
| #!/usr/bin/php | |
| <?php | |
| function usage() { | |
| echo "Usage: " . $_SERVER['argv'][0] . " [-v] URL\n"; | |
| echo "\nPretty-prints JSON output from a URL."; | |
| echo "\n\t-v\tDecode JSON and use var_dump to display result\n"; | |
| } | |
| /** | |
| * Indents a flat JSON string to make it more human-readable. | |
| * Stolen from http://recursive-design.com/blog/2008/03/11/format-json-with-php/ | |
| * and adapted to put spaces around : characters. | |
| * | |
| * @param string $json The original JSON string to process. | |
| * | |
| * @return string Indented version of the original JSON string. | |
| */ | |
| 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); | |
| // Put spaces in front of : | |
| if ($outOfQuotes && $char == ':' && $prevChar != ' ') { | |
| $result .= ' '; | |
| } | |
| if ($outOfQuotes && $char != ' ' && $prevChar == ':') { | |
| $result .= ' '; | |
| } | |
| // 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; | |
| } | |
| $url = null; | |
| $asVarDump = false; | |
| foreach ($_SERVER['argv'] as $arg) { | |
| if ($arg == '-v') { | |
| $asVarDump = true; | |
| } else if ($arg == '--help') { | |
| usage(); | |
| exit; | |
| } else { | |
| $url = $arg; | |
| } | |
| } | |
| if (!$url) { | |
| usage(); | |
| exit(-1); | |
| } | |
| if ($asVarDump) { | |
| $result = json_decode(file_get_contents($url)); | |
| var_dump($result); | |
| } else { | |
| $result = indent(file_get_contents($url)); | |
| echo $result; | |
| } | |
| echo "\n"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment