shomanのブログ

ただの備忘録

Golangのjson.UnmarshalでJSONをデコードできない

問題

以下のコードで、Person構造体のp.nameに"hoge"が入ることを期待してました。

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    name string `json:"name"`
}

func main() {
    str := `{"name": "hoge"}`
    var p Person
    if err := json.Unmarshal([]byte(str), &p); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(p.name)
}

しかし、実際にはp.nameは空となってしまいます。

結論

フィールドの先頭を大文字にしよう

type Person struct {
    Name string `json:"name"`
}

これでp.Nameにちゃんと"hoge"が入ります。

当たり前すぎて……ただ、json.Unmarshalは対応するフィールドが見つからなくてもエラーは出さないため、時間を取られてしまいました。