Golangのstructをjson化するときに特定のキーだけ除外したい

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

json.Marshalでstructをjson文字列にするの便利ですよね。
ただ、structのフィールドとして持ってはおきたいけど、
ある特定のキーだけはjsonに吐き出したくないみたいな時どうすると良いのかなと思った感じでした。
ぐぐったらstackoverflowが出てきました。
http://stackoverflow.com/questions/17306358/golang-removing-fields-from-struct-or-hiding-them-in-json-response

その後、よーくドキュメント見たらふつうに書いてありました。
https://golang.org/pkg/encoding/json/#Marshal

結論json:"-"を指定すれば良いみたいです。
ついでに知ったんですが、値がないときは表示しないみたいな事も omitempty を指定することでできるんですね。

package main

import (
    "encoding/json"
    "fmt"
)

type Hoge struct {
    A string `json:"a"`
    B string `json:"-"`
    C string `json:"c"`
    D string `json:"d,omitempty`
    E string `json:",omitempty"`
    F string `json:"f"`
    G string `json:"g,omitempty"`
}

func main() {
    hoge := Hoge{
        A: "aaa",
        B: "bbb",
        C: "ccc",
        D: "ddd",
        E: "eee",
    }

    str, _ := json.Marshal(hoge)
    fmt.Println(string(str))
}

こうするとこんな感じに表示されました

{"a":"aaa","c":"ccc","D":"ddd","E":"eee","f":""}

https://play.golang.org/p/8_E9R7AywI