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 }
----------------------------------------------