0
JSONから構造体へ変換する
2022-11-05

トップレベルが配列[]とマップ{}の場合のUnmarshal

  • サンプル
package main

import(
	"fmt"
	"encoding/json"
)

type Sample struct {
	Hoge int `json:"hoge"`
	Fuga string `json:"fuga"`
}

func mapJson() {
	str := `{"hoge":1,"fuga":"piyo"}`
	var data Sample
	if err := json.Unmarshal([]byte(str), &data); err != nil {
		panic(err)
	}

	fmt.Printf("%#v\n", data)
}

func sliceJson() {
	str := `[{"hoge":1,"fuga":"piyo"},{"hoge":2,"fuga":"piyopiyo"}]`
	var data []Sample
	if err := json.Unmarshal([]byte(str), &data); err != nil {
		panic(err)
	}

	fmt.Printf("%#v\n", data)
}

func main() {
	mapJson()
	sliceJson()
}
  • 実行
$ go run json.go
main.Sample{Hoge:1, Fuga:"piyo"}
[]main.Sample{main.Sample{Hoge:1, Fuga:"piyo"}, main.Sample{Hoge:2, Fuga:"piyopiyo"}}

変数宣言の部分で型を用意しているとそんなに違和感ない

interface{}になるとこんがらがってしまったがまとめながら見たら特につまずきポイントもない…

  • マップ
var data map[string]interface{}
  • 配列
var data []map[string]interface{}
  • 実行
$ go run json.go
map[string]interface {}{"fuga":"piyo", "hoge":1}
[]map[string]interface {}{map[string]interface {}{"fuga":"piyo", "hoge":1}, map[string]interface {}{"fuga":"piyopiyo", "hoge":2}}
0

Profile

swfz
swfz
日々学んだことを残していく
Today I Learned
コード片置き場

Account

RSS

Powered by Pixela
© 2024. swfz