読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

JSONをUnmarshalして"json: cannot unmarshal null into Go value of type ...."となる

Go

はじめに

こんにちは、Go界の三船敏郎です。いまPython温泉でGoをいじってるんですが、nullが入ってるJSONをUnmarshalしたらはまったのでメモ。

エラーが起きたコード

...
type Hoge struct {
	Foo string
	Bar string
}
...
func Piyo() {
	...
	var h Hoge
	err := json.Unmarshal(b, h)
	...
}

これでこういうJSONが返ってくると"json: cannot unmarshal null into Go value of type string"となる。

{"foo": null,
 "bar": "spam"}

コードの変更

JSONのnullはGoのnilに変換されるので、型をstringでなく*stringにすれば良い。

...
type Hoge struct {
	Foo *string
	Bar *string
}
...

しかし、できればnullが返って来たら初期値にするようにしてほしいなあ...

追記 (2012.10.30)

修正されて、nullが会った場合にはzero valueが入るようになりました。Go 1.1で適用される予定。