https://github.com/mitranim/jsonfmt
Flexible JSON formatter. Supports comments, multi-line with single-line chunks within width limit, fixes punctuation. Library and optional CLI.
https://github.com/mitranim/jsonfmt
formatter json
Last synced: 9 months ago
JSON representation
Flexible JSON formatter. Supports comments, multi-line with single-line chunks within width limit, fixes punctuation. Library and optional CLI.
- Host: GitHub
- URL: https://github.com/mitranim/jsonfmt
- Owner: mitranim
- License: unlicense
- Created: 2020-11-04T14:00:37.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2025-04-02T08:24:54.000Z (10 months ago)
- Last Synced: 2025-04-26T06:56:57.077Z (9 months ago)
- Topics: formatter, json
- Language: Go
- Homepage:
- Size: 43 KB
- Stars: 14
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
## Overview
Flexible JSON formatter. Features:
* Preserves order.
* Supports comments (configurable).
* Supports trailing commas (configurable).
* Supports max width (configurable).
* For dicts and lists: single-line until given width, multi-line after
exceeding said width.
* Fixes missing or broken punctuation.
* Tiny Go library.
* Optional tiny CLI.
* No dependencies.
See API documentation at https://godoc.org/github.com/mitranim/jsonfmt.
Current limitations:
* Always permissive. Unrecognized non-whitespace is treated as arbitrary content on par with strings, numbers, etc.
* Slower than `json.Indent` from the Go standard library.
* Input must be UTF-8.
* No streaming support. Input and output are `[]byte` or `string`.
* Streaming support could be added on demand.
## Installation
### Library
To use this as a library, simply import it:
```go
import "github.com/mitranim/jsonfmt"
var formatted string = jsonfmt.Format[string](jsonfmt.Default, `{}`)
var formatted string = jsonfmt.FormatString(jsonfmt.Default, `{}`)
var formatted []byte = jsonfmt.FormatBytes(jsonfmt.Default, `{}`)
```
### CLI
First, install Go: https://golang.org. Then run this:
```sh
go install github.com/mitranim/jsonfmt/jsonfmt@latest
```
This will compile the executable into `$GOPATH/bin/jsonfmt`. Make sure `$GOPATH/bin` is in your `$PATH` so the shell can discover the `jsonfmt` command. For example, my `~/.profile` contains this:
```sh
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"
```
Alternatively, you can run the executable using the full path. At the time of writing, `~/go` is the default `$GOPATH` for Go installations. Some systems may have a different one.
```sh
~/go/bin/jsonfmt
```
## Usage
See the library documentation on https://godoc.org/github.com/mitranim/jsonfmt.
For CLI usage, run `jsonfmt -h`.
## Examples
**Supports comments and trailing commas** (all configurable):
```jsonc
{// Line comment
"one": "two", /* Block comment */ "three": 40}
```
Output:
```jsonc
{
// Line comment
"one": "two",
/* Block comment */
"three": 40,
}
```
**Single-line until width limit** (configurable):
```jsonc
{
"one": {"two": ["three"], "four": ["five"]},
"six": {"seven": ["eight"], "nine": ["ten"], "eleven": ["twelve"], "thirteen": ["fourteen"]}
}
```
Output:
```jsonc
{
"one": {"two": ["three"], "four": ["five"]},
"six": {
"seven": ["eight"],
"nine": ["ten"],
"eleven": ["twelve"],
"thirteen": ["fourteen"],
},
}
```
**Fix missing or broken punctuation**:
```jsonc
{"one" "two" "three" {"four" "five"} "six" ["seven": "eight"]},,,
```
Output:
```jsonc
{"one": "two", "three": {"four": "five"}, "six": ["seven", "eight"]}
```
## License
https://unlicense.org
## Misc
I'm receptive to suggestions. If this library _almost_ satisfies you but needs changes, open an issue or chat me up. Contacts: https://mitranim.com/#contacts