[Go] JSONをUnmarshalした場合の型

JSON文字列をパースして扱う必要があった。
事前に受け取る際のラベルや値の型が決まっていれば、それにあわせたstructを作って収めればいいと思う。

今回は、事前にラベルも入ってくる値の型も決まっていないため、map[string]interface{}に収めることにした。
ラベルの方はstringで問題ないが、値の方の型が気になったので調べてみた結果。

package main
import (
	"encoding/json"
	"fmt"
)
func main() {
	s := `{
		"a":12345,
		"b":12345.678,
		"c":"12345",
		"d":true,
		"e":null
		}`
	m := make(map[string]interface{})
	json.Unmarshal([]byte(s), &m)
	for k, v := range m {
		fmt.Printf("key=%s, type=%T, value=%v\n", k, v, v)
	}
}

結果はこんな感じだった。取り扱う際は型でスイッチして使う感じなのかな。

key=c, type=string, value=12345
key=d, type=bool, value=true
key=e, type=<nil>, value=<nil>
key=a, type=float64, value=12345
key=b, type=float64, value=12345.678

The Go Playground


この記事が気に入ったらサポートをしてみませんか?