爆速!GolangでJSONの記載から構造体を作る方法
目次
JSON-to-Goを利用し、JSON形式からコピペするだけで構造体を作る方法
REST APIを叩いてJSONを取得するというケースが最近増えているのではないでしょうか。 JSON取得する際にGolangで面倒なのが、構造体を作るところだと思います。 今回は一発で構造体の雛形を作成するWEBサイトを紹介します。
実際にやってみます
https://lightning.bitflyer.com/docs#http-api 例えば、REST APIのレスポンスメッセージ例の記載されているサイトから レスポンスメッセージをコピーします。 今回は、Tickerを例に取得してみます。
{
"product_code": "BTC_JPY",
"state": "RUNNING",
"timestamp": "2015-07-08T02:50:59.97",
"tick_id": 3579,
"best_bid": 30000,
"best_ask": 36640,
"best_bid_size": 0.1,
"best_ask_size": 5,
"total_bid_depth": 15.13,
"total_ask_depth": 20,
"market_bid_size": 0,
"market_ask_size": 0,
"ltp": 31690,
"volume": 16819.26,
"volume_by_product": 6819.26
}
JSONという枠にコピーするだけで下の情報が取得できます。
type AutoGenerated struct {
ProductCode string `json:"product_code"`
State string `json:"state"`
Timestamp string `json:"timestamp"`
TickID int `json:"tick_id"`
BestBid int `json:"best_bid"`
BestAsk int `json:"best_ask"`
BestBidSize float64 `json:"best_bid_size"`
BestAskSize int `json:"best_ask_size"`
TotalBidDepth float64 `json:"total_bid_depth"`
TotalAskDepth int `json:"total_ask_depth"`
MarketBidSize int `json:"market_bid_size"`
MarketAskSize int `json:"market_ask_size"`
Ltp int `json:"ltp"`
Volume float64 `json:"volume"`
VolumeByProduct float64 `json:"volume_by_product"`
}
その他にも
{
"mid_price": 33320,
"bids": [
{
"price": 30000,
"size": 0.1
},
{
"price": 25570,
"size": 3
}
],
"asks": [
{
"price": 36640,
"size": 5
},
{
"price": 36700,
"size": 1.2
}
]
}
ネストの深いJSONレスポンスがあったとしても、
type AutoGenerated struct {
MidPrice int `json:"mid_price"`
Bids []struct {
Price int `json:"price"`
Size float64 `json:"size"`
} `json:"bids"`
Asks []struct {
Price int `json:"price"`
Size int `json:"size"`
} `json:"asks"`
}
このように取得することが可能です。
まとめ
とても手軽に、JSON形式のレスポンスメッセージを構造体に変換することができるサイトを紹介しました。 ぜひ、皆様の開発に役立てることができれば幸いです。