Skip to content

JSON Prettier Printer that occupies a minimal number of lines while pretty-printing given JSON.

License

Notifications You must be signed in to change notification settings

tanishiking/jpp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jpp

Build Status Codacy Badge

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.

screenshot from 2018-10-28 16-57-16 This example.json cites from https://json.org/example.html

Instalation

Homebrew

$ brew install tanishiking/jpp/jpp

Download binary from GitHub Releases

https://github.com/tanishiking/jpp/releases

Build from source

$ go get -u github.com/tanishiking/jpp/cmd/jpp

Develop

$ make build # build binary into ./bin/jpp
$ make test # run all unit tests

jpp command

Options

  • -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.
  • -i: indent string (default: ' ')

Environment Variables

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
  ]
]

Package Usage

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
	//   ]
	// ]
}