This CLI tool allows for the simple conversion of a JSON payload into ready-to-use Go types. The JSON payload can be supplied via file, STDIN, or URL fetching. The generation is able to correctly parse all top-level data types as well as deeply nested arrays and objects. Optional CLI arguments allow the customization of the outputted Go files.
go install github.com/alehechka/json2go/cmd/json2go@latest
From local JSON file:
json2go generate --file=example.json
From STDIN:
cat example.json | json2go generate
From URL fetching:
json2go generate --url="https://gorest.co.in/public/v2/users"
Argument | Example | Type | Purpose | Default |
---|---|---|---|---|
File name | --file=example.json |
string |
Valid path to local file on disk | |
URL | --url="https://example.com |
string |
Valid URL that JSON can be fetched via GET request from. | |
Root Object Name | --root=RootObject |
string |
Name for top-level object in JSON payload | Root |
Package Name | --package=api |
string |
Name of package to generate types into. A nested package path is valid | main |
Output File Name | --output |
string |
The name of the file that is generated. If a file is provided as input, will use matching name unless explicitly provided. The ".go" extension is not required and will be automatically appended. | types.go |
Time Format | --time=2006-01-02 |
string |
Time format to use while parsing strings for potential time.Time variables. View time.Time constants for possible defaults: https://pkg.go.dev/time#pkg-constants | RFC3339 |
Omit Empty | --omitempty |
bool |
Appends the omitempty to all object variable tags. | false |
Alphabetical Order | --alpha |
bool |
Sorts all keys into alphabetical order before generation. | false |
Debug logging | --debug |
bool |
Will output debugging console logs. | false |
Quiet | --quiet |
bool |
Will quiet fatal errors. | false |
STDOUT | --out |
bool |
Instead of generating a Go file, will instead print the contents to STDOUT | false |
While developing locally, the CLI can be used directly with the go run
option as follows:
go run cmd/json2go/main.go generate --file=example.json <...args>