Categorygithub.com/tmc/json-to-struct
repositorypackage
0.0.0-20251007235854-73e9c487eba6
Repository: https://github.com/tmc/json-to-struct.git
Documentation: pkg.go.dev

# README

json-to-struct

SLSA 3

json-to-struct attempts to generate go struct definitions from json documents

Online Version Here

Example

$ curl -s https://api.github.com/users/tmc | json-to-struct -name=User
package main

type User struct {
	AvatarURL         string      `json:"avatar_url"`
	Bio               interface{} `json:"bio"`
	Blog              string      `json:"blog"`
	Company           string      `json:"company"`
	CreatedAt         string      `json:"created_at"`
	Email             string      `json:"email"`
	EventsURL         string      `json:"events_url"`
	Followers         float64     `json:"followers"`
	FollowersURL      string      `json:"followers_url"`
	Following         float64     `json:"following"`
	FollowingURL      string      `json:"following_url"`
	GistsURL          string      `json:"gists_url"`
	GravatarID        string      `json:"gravatar_id"`
	Hireable          bool        `json:"hireable"`
	HtmlURL           string      `json:"html_url"`
	ID                float64     `json:"id"`
	Location          string      `json:"location"`
	Login             string      `json:"login"`
	Name              string      `json:"name"`
	OrganizationsURL  string      `json:"organizations_url"`
	PublicGists       float64     `json:"public_gists"`
	PublicRepos       float64     `json:"public_repos"`
	ReceivedEventsURL string      `json:"received_events_url"`
	ReposURL          string      `json:"repos_url"`
	StarredURL        string      `json:"starred_url"`
	SubscriptionsURL  string      `json:"subscriptions_url"`
	Type              string      `json:"type"`
	UpdatedAt         string      `json:"updated_at"`
	URL               string      `json:"url"`
}

Installation

$ go install github.com/tmc/json-to-struct@latest

Features

  • Struct Extraction: Automatically extract repeated nested structures with -extract-structs
  • Streaming Mode: Progressive output for large datasets with -stream
  • Roundtrip Validation: Verify generated structs with -roundtrip
  • Field Statistics: Add occurrence metadata with -stat-comments
  • Custom Field Ordering: Control field order with -field-order (alphabetical, encounter, common-first, rare-first)
  • Template Support: Custom output formatting via -template
  • NDJSON Support: Process newline-delimited JSON

Usage

# Basic usage
$ curl -s https://api.github.com/users/tmc | json-to-struct -name=User

# Extract repeated structs to reduce duplication
$ cat data.json | json-to-struct -name=Data -extract-structs

# Generate with field statistics comments
$ cat data.json | json-to-struct -name=Data -stat-comments

# Validate generated structs with roundtrip testing
$ cat data.json | json-to-struct -name=Data -roundtrip

# Process large datasets with streaming output
$ cat large.json | json-to-struct -name=Data -stream

# Custom field ordering by occurrence frequency
$ cat data.json | json-to-struct -name=Data -field-order=common-first

Related Work

github.com/ChimeraCoder/gojson github.com/str1ngs/jflect

License

json-to-struct is free software distributed under Version 3 of the GNU Public License.

As of the time of writing, this is the same license used for gcc (and therefore gccgo), so it is unlikely to restrict use in any way. Note that the GPL does not extend to any output generated by json-to-struct; the GPL only applies to software which includes copies of json-to-struct itself.