YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

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

はじめに

こんにちは、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で適用される予定。