眺めて覚えるGo言語 その12 Map & Json

#json文字列([]byte)を定義してvar adrs []map[string]interface{}形式にマーシャルします。
```json.go
package main
import (

	"encoding/json"
	"fmt"
	"log"
)
func main() {
b:=[]byte(`[{
"ID":1,
"Name":"関波子",
"Furigana":"セキナミコ",
"Sex":"女",
"Blood":"AB",
"Date":"1980/07/31",
"Tel":"03-3060-4716",
"MTel":"090-7787-3784",
"Mail":"sk@eaccess.net"
},
{
"ID":2,
"Name":"小倉準司",
"Furigana":"コクラジュンジ",
"Sex":"男",
"Blood":"A",
"Date":"1973/10/08",
"Tel":"0166-36-3522",
"MTel":"",
"Mail":"junzi-kokura@eaccess.net"
},
{
"ID":3,
"Name":"西村有紀子",
"Furigana":"ニシムラユキコ",
"Sex":"女",
"Blood":"O",
"Date":"1972/12/05",
"Tel":"0745-67-2723",
"MTel":"090-5165-2074",
"Mail":"okikuy1972@livedoor.com"
}
]`)

	var adrs []map[string]interface{}
	if err := json.Unmarshal(b, &adrs); err != nil {
	    log.Fatal(err)
	}
	for _,a := range adrs {
		for k,v :=range a{
			fmt.Println(k,v)
		}
		fmt.Println("----------------------------------------------")
	}
}
実行結果
go run json.go
Name 関波子
Sex 女
Blood AB
Date 1980/07/31
ID 1
Furigana セキナミコ
Tel 03-3060-4716
MTel 090-7787-3784
Mail sk@eaccess.net
----------------------------------------------
ID 2
Tel 0166-36-3522
MTel
Mail junzi-kokura@eaccess.net
Name 小倉準司
Furigana コクラジュンジ
Sex 男
Blood A
Date 1973/10/08
----------------------------------------------
Name 西村有紀子
Furigana ニシムラユキコ
Date 1972/12/05
Mail okikuy1972@livedoor.com
ID 3
Blood O
Tel 0745-67-2723
MTel 090-5165-2074
Sex 女
----------------------------------------------
```

#日本語jsonでも動作します。

```jp_json.go
package main

import (
	"encoding/json"
	"fmt"
	"log"
)
func main() {
b:=[]byte(`[{
    "ID":1,
    "名前":"関波子",
    "名前フリガナ":"セキナミコ",
    "性別":"女",
    "血液型":"AB",
    "生年月日":"1980/07/31",
    "電話番号":"03-3060-4716",
    "携帯番号":"090-7787-3784",
    "メール":"sk@eaccess.net"
    },
    {
    "ID":2,
    "名前":"小倉準司",
    "名前フリガナ":"コクラジュンジ",
    "性別":"男",
    "血液型":"A",
    "生年月日":"1973/10/08",
    "電話番号":"0166-36-3522",
    "携帯番号":"",
    "メール":"junzi-kokura@eaccess.net"
    },
    {
    "ID":3,
    "名前":"西村有紀子",
    "名前フリガナ":"ニシムラユキコ",
    "性別":"女",
    "血液型":"O",
    "生年月日":"1972/12/05",
    "電話番号":"0745-67-2723",
    "携帯番号":"090-5165-2074",
    "メール":"okikuy1972@livedoor.com"
    }
]`)
	var adrs []map[string]interface{}
	if err := json.Unmarshal(b, &adrs); err != nil {
	    log.Fatal(err)
	}
	for _,a := range adrs {
		for k,v :=range a{
			fmt.Println(k,v)
		}
		fmt.Println("----------------------------------------------")
	}
}

実行結果
>go run jp_json.go
名前フリガナ セキナミコ
生年月日 1980/07/31
電話番号 03-3060-4716
メール sk@eaccess.net
ID 1
名前 関波子
性別 女
血液型 AB
携帯番号 090-7787-3784
----------------------------------------------

C:\Users\hirat\go-work\go-json>go run ex3.go
ID 1
性別 女
血液型 AB
生年月日 1980/07/31
携帯番号 090-7787-3784
メール sk@eaccess.net
名前 関波子
名前フリガナ セキナミコ
電話番号 03-3060-4716
----------------------------------------------
ID 2
名前フリガナ コクラジュンジ
血液型 A
電話番号 0166-36-3522
携帯番号
メール junzi-kokura@eaccess.net
名前 小倉準司
性別 男
生年月日 1973/10/08
----------------------------------------------
血液型 O
生年月日 1972/12/05
電話番号 0745-67-2723
メール okikuy1972@livedoor.com
携帯番号 090-5165-2074
ID 3
名前 西村有紀子
名前フリガナ ニシムラユキコ
性別 女
----------------------------------------------
```

#注意

```
type Adr struct {
	ID     　　　int
	名前     　　string
	名前フリガナ string
	性別     　　string
	血液型    　string
	生年月日   string
	電話番号   string
	携帯番号   string
	メール    string
}
```

## 上記のようなstructを定義して

```
        var adrs []Adr
	if err := json.Unmarshal(bytes, &adrs); err != nil {
		log.Fatal(err)
	}
```

を実行すると文字通りUnmarshal(無法者)の結果が得られます。

```
{0        }
----------------------------------------------
{0        }
----------------------------------------------
{0        }
----------------------------------------------
{0        }
----------------------------------------------
```