1
0

More than 3 years have passed since last update.

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

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0