爆速!GolangでJSONの記載から構造体を作る方法

2021-02-28

JSON-to-Goを利用し、JSON形式からコピペするだけで構造体を作る方法

REST APIを叩いてJSONを取得するというケースが最近増えているのではないでしょうか。 JSON取得する際にGolangで面倒なのが、構造体を作るところだと思います。 今回は一発で構造体の雛形を作成するWEBサイトを紹介します。

JSON-to-GO

Json to GO

実際にやってみます

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形式のレスポンスメッセージを構造体に変換することができるサイトを紹介しました。 ぜひ、皆様の開発に役立てることができれば幸いです。