golangでjson用のstructを生成するGo製ツール(gojson)
Goでjsonのデータを扱う機会は多いのですが、
その度にjson:"hogehoge"
を書くのがめんどくさいなーと思ってました。
jsonのI/Fが決まってるならそこからgoのコード生成すればいいかなと思い、作る前に類似ツールがないか調べていたら、すでに丁度いいのがあって便利だったので紹介したいと思います。
ChimeraCoder/gojson
install
$ go get github.com/ChimeraCoder/gojson
使い方
大きく2パターン?もっとありそうです。
ローカルにjsonがある場合
hoge.json
{ "id": 1111111111, "name": "kyokomi", "full_name": "kyokomi/kyokomi" }
普通にcat等でパイプで渡してやるといい感じです。
$ cat test/star.json | gojson -pkg=main -name=Starred > starred.go
引数の意味
-pkg
パッケージ名-name
structの名前
出力結果
実行結果は標準出力されるので、そのまま.go
とかに書き込めばいい感じになります。
package main type Hoge struct { FullName string `json:"full_name"` ID float64 `json:"id"` Name string `json:"name"` }
curlでパイプするのも可能
便利です。他にも色々使えそう。
curlする
$ curl https://api.github.com/users/kyokomi | gojson -pkg=main -name=GitHubUser
実行結果
package main type GitHubUser 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"` SiteAdmin bool `json:"site_admin"` StarredURL string `json:"starred_url"` SubscriptionsURL string `json:"subscriptions_url"` Type string `json:"type"` UpdatedAt string `json:"updated_at"` URL string `json:"url"` }