JSON Prettier Printer that occupies a minimal number of lines while pretty-printing given JSON, using prettier which is Go implementation of "Wadler's "A Prettier Printer".
jpp
is quite useful when we want to pretty print the JSON whose each node has a lot of children scalar values.
This example.json
cites from https://json.org/example.html
$ brew install tanishiking/jpp/jpp
https://github.com/tanishiking/jpp/releases
$ go get -u github.com/tanishiking/jpp/cmd/jpp
-w
: width (default: your terminal width)- Note that this command does not guarantee there are no lines longer than
width
- It just attempts to keep lines within this length when possible.
- Note that this command does not guarantee there are no lines longer than
-i
: indent string (default:' '
)
We can specify the color of output string using following environment variables
JPP_NULL
JPP_BOOL
JPP_NUMBER
JPP_STRING
JPP_FIELDNAME
and builtin colors:
black
red
green
brown
blue
magenta
cyan
gray
bold_black
bold_red
bold_green
bold_brown
bold_blue
bold_magenta
bold_cyan
bold_gray
For example, cat some.json | JPP_NUMBER=bold_red jpp
.
In addition, we can specify complicated styles using SGR code.
See: https://en.wikipedia.org/wiki/ANSI_escape_code
$ go get -u github.com/tanishiking/jpp/cmd/jpp
$ cat numbers.json
[
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
]
$ cat numbers.json | jpp -w 20
[
[
1, 2, 3, 4, 5,
6, 7, 8, 9, 10
],
[
1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14,
15
],
[
1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14,
15, 16, 17, 18,
19, 20
]
]
import (
"fmt"
"github.com/tanishiking/jpp"
)
func main() {
jsonStr := `
[
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ],
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
]
`
res, _ := jpp.Pretty(jsonStr, " ", 20, nil)
fmt.Println(res)
// [
// [
// 1, 2, 3, 4, 5,
// 6, 7, 8, 9, 10
// ],
// [
// 1, 2, 3, 4, 5,
// 6, 7, 8, 9, 10,
// 11, 12, 13, 14,
// 15
// ],
// [
// 1, 2, 3, 4, 5,
// 6, 7, 8, 9, 10,
// 11, 12, 13, 14,
// 15, 16, 17, 18,
// 19, 20
// ]
// ]
}