使用Go导出到JSON时,如何包含方法调用的结果?

时间:2014-07-02 14:24:21

标签: json go

想象一下:

type Ninja struct {
  name string
}

func (n *Ninja) Shurikens() int {
  return 2
}

n := &Ninja{"Super Ninja"}

我想将其序列化为JSON,并获得以下内容:

{'Name': 'Super Ninja', 'Shurikens':2}

这只是我所需要的简化(在结构上调用方法,并在结果JSON中包含该输出)。

1 个答案:

答案 0 :(得分:5)

简短的回答,你不能,你的Shurikens必须是一个领域。

答案很长,好吧,您可以使用this之类的自定义MarshalJSON

func (n *Ninja) MarshalJSON() ([]byte, error) {

    return []byte(fmt.Sprintf(`{"Name":"%s", "Shurikens":%d}`, n.name, n.Shurikens())), nil
}

func main() {
    n := []*Ninja{{"X"}, {"Y"}}
    b, err := json.Marshal(n)
    fmt.Println(string(b), err)
}

请注意,您的name字段未导出,因为它不以大写字母开头,因此您将无法解组您的结构。