
Pretty-print JSON with Go
2 Jan 2021 #pattern #python #golang #development
Today, we have a simple recipe to pretty-print JSON using Golang:
package main import ( "bytes" "encoding/json" "fmt" "log") func formatJSON(data []byte) ([]byte, error) { var out bytes.Buffer err := json.Indent(&out, data, "", " ") if err == nil { return out.Bytes(), err } return data, nil} func main() { data := []byte(`{"key":"hello","msg":"world"}`) prettyJSON, err := formatJSON(data) if err != nil { log.Fatal(err) } fmt.Println(string(prettyJSON)) }
Run this in the Go Playground.
The idea is that we take a byte slice of JSON data and then use the json.Indent
method to format it. It's signature is as follows:
func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error
Indent appends to
dst
an indented form of the JSON-encodedsrc
. Each element in a JSON object or array begins on a new, indented line beginning withprefix
followed by one or more copies ofindent
according to the indentation nesting. The data appended todst
does not begin with theprefix
nor any indentation, to make it easier to embed inside other formatted JSON data. Although leading space characters (space, tab, carriage return, newline) at the beginning ofsrc
are dropped, trailing space characters at the end ofsrc
are preserved and copied todst
. For example, ifsrc
has no trailing spaces, neither willdst
; ifsrc
ends in a trailing newline, so willdst
.
To accomplish the same in Python, you can do:
import json def formatJSON(input): parsed = json.loads(input) return json.dumps(parsed, indent=4) def main(): data = '{"key":"hello","msg":"world"}' pretty_json = formatJSON(data) print(pretty_json) if __name__ == "__main__": main()