Pretty is a Go package that provides fast methods for formatting JSON for human readability, or to compact JSON for smaller payloads.
To start using Pretty, install Go and run go get
:
$ go get -u github.com/tidwall/pretty
This will retrieve the library.
Using this example:
{"name": {"first":"Tom","last":"Anderson"}, "age":37,
"children": ["Sara","Alex","Jack"],
"fav.movie": "Deer Hunter", "friends": [
{"first": "Janet", "last": "Murphy", "age": 44}
]}
The following code:
result = pretty.Pretty(example)
Will format the json to:
{
"name": {
"first": "Tom",
"last": "Anderson"
},
"age": 37,
"children": ["Sara", "Alex", "Jack"],
"fav.movie": "Deer Hunter",
"friends": [
{
"first": "Janet",
"last": "Murphy",
"age": 44
}
]
}
Color will colorize the json for outputing to the screen.
result = pretty.Color(json, nil)
Will add color to the result for printing to the terminal.
The second param is used for a customizing the style, and passing nil will use the default pretty.TerminalStyle
.
The following code:
result = pretty.Ugly(example)
Will format the json to:
{"name":{"first":"Tom","last":"Anderson"},"age":37,"children":["Sara","Alex","Jack"],"fav.movie":"Deer Hunter","friends":[{"first":"Janet","last":"Murphy","age":44}]}```
There's a PrettyOptions(json, opts)
function which allows for customizing the output with the following options:
type Options struct {
// Width is an max column width for single line arrays
// Default is 80
Width int
// Prefix is a prefix for all lines
// Default is an empty string
Prefix string
// Indent is the nested indentation
// Default is two spaces
Indent string
// SortKeys will sort the keys alphabetically
// Default is false
SortKeys bool
}
Benchmarks of Pretty alongside the builtin encoding/json
Indent/Compact methods.
BenchmarkPretty-8 1000000 1283 ns/op 720 B/op 2 allocs/op
BenchmarkUgly-8 3000000 426 ns/op 240 B/op 1 allocs/op
BenchmarkUglyInPlace-8 5000000 340 ns/op 0 B/op 0 allocs/op
BenchmarkJSONIndent-8 300000 4628 ns/op 1069 B/op 4 allocs/op
BenchmarkJSONCompact-8 1000000 2469 ns/op 758 B/op 4 allocs/op
These benchmarks were run on a MacBook Pro 15" 2.8 GHz Intel Core i7 using Go 1.7.
Josh Baker @tidwall
Pretty source code is available under the MIT License.