生涯未熟

生涯未熟

プログラミングをちょこちょこと。

UnmarshalJSONを使ってJSONをシュッと変換する

渡ってきたJSONをUnmarshalしようと、こんな感じのコードを書きました。

package main

import (
    json "encoding/json"
    "fmt"
)

type User struct {
    Name []byte `json:name`
}

func main() {
    var j = `{ "name": "Ken" }`

    var u User
    json.Unmarshal([]byte(j), &u)
    fmt.Println(string(u.Name))
}

上手いことNameに値が入ってくるのかなと思ったら何も入ってこない・・・

なので、UnmarshalJSONを使ってシュッとやってみました。

package main

import (
    json "encoding/json"
    "fmt"
)

type User struct {
    Name []byte `json:name`
}

func (u *User) UnmarshalJSON(data []byte) (err error) {
    var value map[string]string
    json.Unmarshal(data, &value)
    u.Name = []byte(value["name"])
    return nil
}

func main() {
    var j = `{ "name": "Ken" }`

    var u User
    json.Unmarshal([]byte(j), &u)
    fmt.Println(string(u.Name))
}

これで表示されました。 Unmarshal時のタイミングで何かかませたい場合はUnmarshalJSONをぶっこめばいいという感じですね。他にも色々使えそう。