jsonのキー名はスネークケース(ex full_name)で記載されている事が多いです。
このような場合、jsonのキー名と構造体のフィールド名をマッピングさせる事ができます。
サンプルJSONファイル
キー名をスネークケースで記載しています。
{
"name": "sample_name",
"events": [
{
"age": 18,
"name": "卒業",
"date_time": "2002-03-30 12:12:12"
},
{
"age": 22,
"name": "入社",
"date_time": "2005-04-01 09:00:00"
}
]
}
構造体フィールドマッピング
構造体のフィールドへマッピングさせるには、構造体を定義するフィールドへ以下のような記述をします。example の記載はなくても大丈夫です。
type event struct {
Age int `json:"age" example:"10"`
Name string `json:"name" example:"eventName"`
DateTime string `json:"date_time" example:"2022-12-12 12:12:12"`
}
サンプル処理
package main
import (
"encoding/json"
"fmt"
"os"
)
// Jsonの内容を格納する構造体
type history struct {
Name string `json:"name" example:"sampleName"`
Events []event `json:"events"`
}
type event struct {
Age int `json:"age" example:"10"`
Name string `json:"name" example:"eventName"`
DateTime string `json:"date_time" example:"2022-12-12 12:12:12"`
}
func main() {
h := history{}
// ファイル読み込み
f, err := os.Open("sample.json")
if err != nil {
return
}
// デコード
json.NewDecoder(f).Decode(&h)
// 結果を表示
fmt.Println(h) // {sample_name [{18 卒業 2002-03-30 12:12:12} {22 入社 2005-04-01 09:00:00}]}
}